Как выйти из системы с устройства B при сбросе пароля с устройства A - PullRequest
0 голосов
/ 06 мая 2020

В моем приложении я использую токены devise-jwt для аутентификации пользователя. У меня есть случай, когда пользователь пытается сбросить пароль с устройства A, но он также входит в ту же учетную запись на устройстве B. Можно ли в таком случае выйти из системы пользователя с устройства B?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Во-первых, я думаю, вам нужно сохранить время, когда пользователь меняет пароль

Затем попробуйте использовать эту службу

#check_token_service.rb

class CheckTokenService
  TOKEN_REGEX = /(?<token_type>\w+)\s(?<token>\S+)/.freeze

  def initialize(token, current_user)
    @current_user = current_user
    @token_decoder = Warden::JWTAuth::TokenDecoder.new.call(token.match(TOKEN_REGEX)['token'])
  end

  def perform
    Time.at(@token_decoder['exp'].to_i) > @current_user.change_password_at + Devise::JWT.config[:expiration_time]
  end
end

, затем вызовите службу перед всеми действиями

raise JWT::ExpiredSignature unless CheckTokenService.new(request.headers["HTTP_AUTHORIZATION"], current_user).perform
0 голосов
/ 06 мая 2020

Вы можете использовать расширение безопасности devise вот ссылка на страницу с подробностями

в этом геме есть 7 дополнительных модулей devise, но вам нужен: session_limitable, который гарантирует, что есть на одну учетную запись можно использовать только один сеанс

короткие шаги установки версии:

gem 'devise-security'
# then run bundle install 
rails generate devise_security:install
# this to run generator

Генератор добавляет дополнительные конфигурации в config / initializers / devise-security.rb. Включите модули, которые вы используете sh в инициализаторе, вы готовы добавить модули Devise Security поверх модулей Devise в любую из ваших моделей Devise:

внутри вашей модели Пользователь или учетная запись, которые вы можете добавить

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