#ruby-on-rails #authentication #replace #devise
#ruby-on-rails #аутентификация #заменить #разработка
Вопрос:
Я использую devise с модулем TokenAuthentication
И все в порядке, когда я не прошел проверку подлинности и перешел по ссылке с ?auth_token = part. Вот так:
Я перехожу по ссылке: /orders?auth_token=q2a8w6virARzv6B2C1vR
где q2a8w6virARzv6B2C1vR
находится authentication_token user1. И теперь я вошел в систему как пользователь1.
Но когда я вошел в систему как какой-либо пользователь через электронную почту пароль и общую страницу входа, а затем перешел по такой ссылке с помощью auth_token с другим пользовательским токеном, я неожиданно остался в системе как первый пользователь.
Вот так:
- Я вхожу через страницу входа. Я ввожу адрес электронной почты и пароль user2. И теперь я вошел в систему как пользователь2
- Я перехожу по ссылке:
/orders?auth_token=q2a8w6virARzv6B2C1vR
гдеq2a8w6virARzv6B2C1vR
находится authentication_token user1. И я все еще вошел в систему как пользователь2 вместо ожидаемого пользователя 1.
Это ошибка? И каковы наилучшие методы изменения этого поведения, чтобы принудительно заменить аутентификацию через токен?
Rails 3.0.6
Разработка 1.2.1
Ответ №1:
вы раскомментировали:token_authenticatable в своей пользовательской модели, правильно?
Комментарии:
1. Да, конечно, я раскомментировал
:token_authenticatable
в пользовательской модели
Ответ №2:
Давайте займемся некромантией вопросов…
Перед запуском stragegies (token_authenticatable, database_authenticatable) Надзиратель сначала проверяет, настроен ли пользователь уже в текущем сеансе.
Это происходит в: https://github.com/hassox/warden/blob/3d653371a2ff594d9965c1dde642c98cd8485e15/lib/warden/proxy.rb#L212
Предполагается ли, что запрос action responsing / orders использует только аутентификацию токена? Если это так, вы можете добавить: before_filter: reset_session
(перед authorize_user
), чтобы Надзирателю не удалось отменить сериализацию пользователя из сеанса и он был вынужден выполнить аутентификацию.
[РЕДАКТИРОВАТЬ] Этот запрос на выпуск содержит разумное решение:https://github.com/plataformatec/devise/issues/1644