Я использую ответный (ax ios) передний конец с рельсовым интерфейсом API. На локальном хосте (rails server
/ npm start
) я остаюсь в системе и могу обновить sh страницу, оставаясь вошедшим в систему, но при развертывании для netlify / heroku обновление страницы приводит к выходу из системы.
Развернуто на: https://nicktohzyu-tdlv5-front.netlify.com/
https://nicktohzyu-tdlv5-api.herokuapp.com/ (API)
Код входа (реагировать):
handleSubmit(event) {
const { email, password } = this.state;
//console.log(this.props.api_url);
axios
.post(
this.props.api_url+"/sessions",
{
user: {
email: email,
password: password
}
},
{ withCredentials: true }
)
.then(response => {
if (response.data.logged_in) {
this.props.handleSuccessfulAuth(response.data);
} else{
this.setState({
loginErrors: response.data.errorMessage
});
//console.log("login error, " + response.data.errorMessage);
}
})
.catch(error => {
console.log("login error", error);
});
event.preventDefault();
}
handleSuccessfulAuth(data) {
this.props.handleLogin(data);
this.props.history.push("/dashboard");
}
handleLogin(data) {
this.setState({
loggedInStatus: "LOGGED_IN",
user: data.user
});
}
Проверьте, вошел ли пользователь в систему:
//(in constructor)
this.state = {
loggedInStatus: "checking",
user: {},
api_url:api_url,
};
componentDidMount() {
this.checkLoginStatus();
}
checkLoginStatus() {
axios
.get(this.state.api_url + "/logged_in", { withCredentials: true })
.then(response => {
if (
response.data.logged_in
) {
this.setState({
loggedInStatus: "LOGGED_IN",
user: response.data.user
});
} else if (
!response.data.logged_in
) {
this.setState({
loggedInStatus: "NOT_LOGGED_IN",
user: {}
});
}
})
.catch(error => {
console.log("check login error", error);
});
}
Backend (рельсы с bcrypt): контроллер сессий:
class SessionsController < ApplicationController
include CurrentUserConcern
def create
user = User
.find_by(email: params["user"]["email"])
.try(:authenticate, params["user"]["password"])
if user
session[:user_id] = user.id
render json: {
status: :created,
logged_in: true,
user: user
}
else
render json: {
status: 401,
errorMessage: "Email or password incorrect"
}
end
end
def logged_in
if @current_user
render json: {
logged_in: true,
user: @current_user
}
else
render json: {
logged_in: false
}
end
end
def logout
reset_session
render json: { status: 200, logged_out: true }
end
end
текущая проблема пользователя
module CurrentUserConcern
extend ActiveSupport::Concern
included do
before_action :set_current_user
end
def set_current_user
if session[:user_id]
@current_user = User.find(session[:user_id])
end
end
end