Rails检查Devise有没有错误?

Rails check if Devise has any errors?

我正在寻找一种方法来检查 Devise 是否对我的 ApplicationController 中的 before_action 方法有任何错误(无效凭据等)。如果 Devise 没有错误,我只需要 运行 该方法中的代码。

class ApplicationController < ActionController::Base
   before_action :foo

   def foo
      if !devise_errors?
   end
end

您的意思是登录错误?你不会只在会话控制器中需要这个吗?

您可以查看即显消息...

但您最好还是签到 Warden:

Warden::Manager.warden_callback do |user, auth, opts|
  # code 
end

您可以像这样检查凭据错误:

class ApplicationController < ActionController::Base
  before_action :foo

  def foo
    if !devise_errors?
  end
  ..
  private

  def devise_errors?
    login_params = devise_parameter_sanitizer.sanitize(:sign_in)
    email = login_params.dig(:email)
    password = login_params.dig(:password)
    user = User.find_by(email: email)
    return true if user.blank?

    !user.valid_password?(password)
  end
  ..
end