Как определить, какая стратегия Devise / Warden использовалась для аутентификации / входа в систему пользователя? - PullRequest
0 голосов
/ 10 января 2019

Допустим, у меня есть две стратегии по умолчанию с Warden, :database_authenticatable и :jwt.

Как определить (внутри контроллера), какая стратегия использовалась для входа в систему current_user?

1 Ответ

0 голосов
/ 10 января 2019

AFAIK нет реализации, чтобы сделать это напрямую. Вы можете переопределить эти стратегии поведения, чтобы ввести какой-то параметр сеанса, чтобы определить, какой есть какой, или вы можете использовать реквизиты заголовков JWT, чтобы определить, что он использовался в данном запросе. Если вы используете значение по умолчанию database_authenticable в настройках по умолчанию, оно используется для общей веб-навигации, которая использует преимущества сеансов браузера. Вы можете использовать это, чтобы идентифицировать своего пользователя, поскольку при использовании с помощью API файлы cookie / сессии обычно отсутствуют. Посмотрите, что вы можете сделать с сессиями Rails и используйте это для идентификации браузеров вашего пользователя, это может быть что-то вроде этого:

session[:user_id] = @current_user.id
User.find(session[:user_id])

Тогда вы могли бы использовать session[:user_id].present?, чтобы проверить, используется ли сеанс в данном контексте, за исключением поведения заголовка HTTP JWT.

Вы также можете сделать это наоборот, идентифицируя наличие и Authorization или Authentication Заголовок HTTP. Этого не будет, если у вас нет текущей аутентификации JWT или другого типа HTTP для текущего запроса. Это можно сделать следующим образом:

request.headers['Authorization'].present? || request.headers['Authentication'].present?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...