Rails, разработка: как заменить прежний вход в систему с помощью токен-аутентификации - PullRequest
4 голосов
/ 18 апреля 2011

Я использую устройство с модулем TokenAuthentication

И это нормально, когда я не прошел проверку подлинности и перехожу по ссылке с? Auth_token = part. Как это:

Я перехожу по ссылке: /orders?auth_token=q2a8w6virARzv6B2C1vR, где q2a8w6virARzv6B2C1vR - идентификатор аутентификации user1 . И теперь я вошел как user1 .

Но когда я вошел в систему как какой-либо пользователь через электронную почту \ пароль и общую страницу входа и затем перешел по такой ссылке с auth_token с другим токеном пользователя, я неожиданно остался в системе как первый пользователь.

Как это:

  1. Я вхожу через страницу входа. я введите адрес электронной почты и пароль user2 . И теперь я вошел как user2
  2. Я перехожу по ссылке: /orders?auth_token=q2a8w6virARzv6B2C1vR где q2a8w6virARzv6B2C1vR маркер аутентификации user1 . И я все еще вошли как user2 вместо ожидается user1 .

Это ошибка? И как лучше изменить это поведение, чтобы принудительно заменить аутентификацию с помощью токена?

Рельсы 3.0.6

Разработка 1.2.1

Ответы [ 2 ]

2 голосов
/ 20 декабря 2012

Давайте сделаем несколько вопросов некромантии ...

Перед запуском stragegies (token_authenticatable, database_authenticatable) Смотритель сначала проверяет, установлен ли пользователь в текущем сеансе.

Это происходит в: https://github.com/hassox/warden/blob/3d653371a2ff594d9965c1dde642c98cd8485e15/lib/warden/proxy.rb#L212

Предполагается ли в ответе на действие / запросе заказов использовать только аутентификацию токена? Если это так, вы можете добавить: before_filter: reset_session (до authorize_user), чтобы Warden не смог десериализовать пользователя из сеанса и был вынужден выполнить аутентификацию.

[EDIT] Этот билет содержит разумное решение: https://github.com/plataformatec/devise/issues/1644

2 голосов
/ 18 апреля 2011

вы раскомментировали: token_authenticatable в вашей пользовательской модели, верно?

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