Search code examples
ruby-on-railsdevise

Rails check if Devise has any errors?


I am looking for a way to check if Devise has any errors (invalid credentials etc.) for a before_action method in my ApplicationController. There is code in that method that I need only to run if Devise has no errors.

class ApplicationController < ActionController::Base
   before_action :foo

   def foo
      if !devise_errors?
   end
end

Solution

  • You can check credential errors like this:

    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