Обновление `current_sign_in_at` и` last_sign_in_at` в приложении rails - PullRequest
0 голосов
/ 10 сентября 2018

Я использую свой собственный логический вход в логике с использованием bcrypt. Однако мне нравится обновлять два атрибута (current_sign_in_at и last_sign_in_at) в моей базе данных. Итак, я следовал логике, определенной в Devise Gem, чтобы учесть мое решение.

Способ, которым Devise Gem реализует это в Devise :: Models :: Trackable.update_tracked_fields! и вызывается как обратный вызов Warden в devise / hooks / trackable.rb . Однако после этих двух реализаций при входе ничего не происходит с базой данных.

Так мне нужен обратный вызов или что-то внутри контроллера, чтобы вызвать это? Или лучше задать вопрос, как мне обновить current_sign_in_at и last_sign_in_at в моей базе данных при входе пользователя?

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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Самый простой способ сделать это - просто обновить временные метки в вашем контроллере сессий:

class SessionsController 
  def create
    # simple example using has_secure_password
    @user = User.find_by(params[:email]) 
    if @user and @user.authenticate(params[:password])  
      @user.update(
        current_sign_in_at: Time.current,
        last_sign_in_at: Time.current
      )
      redirect_to root_path, success: 'You have been logged in'
    else
      render :new, error: 'Incorrect email or password'
    end
  end
end
0 голосов
/ 10 сентября 2018

вы можете написать метод для обновления current_sign_in_at и last_sign_in_at в контроллере и вызвать его в after_action для соответствующего действия sign_in

Например, если sign_in - это метод, который вызывается, когда пользователь sign_in затем

after_action:update_current_sign_in only: %i(sign_in)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...