У меня проблемы с моими действиями аутентификации из react-native в мой ruby on rails backend api. Я думал, что мои действия по регистрации / входу работают нормально, пока я не выполнил свое действие по выходу из системы и не начал получать ошибку контроллера rails. Моя функция выхода из системы запрашивает удаление сеанса пользователя и не может его найти, но мои функции входа / регистрации не имеют проблем с созданием сеанса.
Мои сеансы # Контроллер:
class SessionsController < ApplicationController
def create
@user = User.find_by_credentials(
params[:user][:username],
params[:user][:password]
)
if @user
login(@user)
render "users/show.json.jbuilder"
else
render json: ["Invalid username/password combination"], status: 401
end
end
def destroy
@user = current_user # I believe the problem is here, as it can't find current_user see
# application controller below
if @user
logout
render json: {}
else
render json: ["Nobody signed in"], status: 404
end
end
end
Контроллер приложения №, где я нахожу текущего пользователя на основе session_token
class ApplicationController < ActionController::Base
skip_before_action :verify_authenticity_token
helper_method :current_user, :logged_in?, :logout
# private
def current_user
return nil unless session[:session_token]
@current_user ||= User.find_by(session_token: session[:session_token])
end
def logged_in?
!!current_user
end
def login(user)
user.reset_session_token!
session[:session_token] = user.session_token
@current_user = user
end
def logout
current_user.reset_session_token!
session[:session_token] = nil
@current_user = nil
end
end
Мое действие выхода:
export const testLogout = () => dispatch => {
dispatch(loadSpinner());
axios({
method: 'delete',
url: 'http://10.0.2.2:3000/session',
})
.then((response) => {
console.log("response: ", response);
if(reponse.status === 200) {
{dispatch(logoutCurrentUser(response))}
} else {
console.log("status", response.status);
};
});
};
Мои маршруты:
Rails.application.routes.draw do
resources :users, only: [:create, :show]
resource :session, only: [:create, :destroy, :show]
end
Ошибки (1): Начат УДАЛЕНИЕ "/ сеанс" для 127.0.0.1 в 2020-05-27 10:23:23 -0700 Обработка SessionsController # уничтожить как HTML Завершено 404 Не найдено за 0 мс (Просмотры: 0,2 мс | ActiveRecord: 0,0 мс).
(2): Возможное отклонение необработанного обещания (id: 0): Ошибка: запрос завершился неудачно с кодом состояния 404
Ошибка 2 из функции testLogout () даже не делает этого на .then (ответ) в функции.
Теперь эта ошибка 404 - моя собственная из метода #destroy в моем sessions_controller, и я немного не уверен, как получить здесь ошибку лучше, чем я чтение онлайн - это то, что react-native обрабатывает брови er cookie по-разному, и я обеспокоен тем, что концептуально что-то упускаю, но я очень не уверен, что это такое. Я знаю, что могу использовать AsyncStorage для сохранения сеансов, но как это влияет на внутреннюю проверку подлинности рельсов? Любая помощь в выяснении того, как выйти из системы, приветствуется, спасибо!