Как уничтожить сеанс («выход из системы») с токен-аутентифицированными пользователями - PullRequest
6 голосов
/ 09 июля 2011

Для пользовательских моделей Devise, использующих :token_authenticatable, например,

class Voter < ActiveRecord::Base
  devise :token_authenticatable
end

раньше существовал маршрут с именем destroy_user_session, чтобы вы могли выйти из системы, связавшись с destroy_user_session_path.Похоже, что это изменилось в последних версиях - теперь только :database_authenticatable создает для меня маршрут уничтожения.

Так что для пользователей, использующих аутентификацию по токену, каков правильный способ реализации «выхода из системы» / »выйти "действие, чтобы закончить свои сеансы?

1 Ответ

5 голосов
/ 09 июля 2011

По умолчанию , когда вы входите через токен, Devise сохраняет пользователя в сеансе, как в стратегии аутентификации базы данных.

Вы можете отключить это, установив stateless_token в true в инициализаторе Devise:

Devise.setup do |config|
  config.stateless_token = true
end

Таким образом, токен должен быть снабжен каждым запросом .


Насколько я понимаю, аутентификация токена была разработана для использования вместе с аутентификацией в базе данных. devise_for добавит маршруты сеанса только в том случае, если ваша модель database_authenticatable. Это кажется незначительным упущением со стороны Devise, но, по моему мнению, токены доступа, оставляющие пользователя в сеансе, не имеют для меня большого смысла для начала.

В любом случае, попробуйте вручную определить маршруты к сеансам Devise.

Адаптировано из Помощники по разработке маршрутов (непроверенный код):

as :user do  # User scope
  resource :session, :controller => 'devise/sessions' do
    # new_user_session | GET /users/sign_in => devise/sessions#new
    get :new, :path => 'sign_in', :as => "new"

    # user_session | POST /users/sign_in => devise/sessions#create
    post :create, :path => 'sign_in'

    # destroy_user_session | GET /users/sign_out => devise/sessions#destroy
    get :destroy, :path => 'sign_out', :as => "destroy"
  end
end

В любом случае документация для devise_for помощника указывает, какие маршруты созданы и на что они указывают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...