Search code examples
ruby-on-railsrubydevise

redirect to a certain page instead of :notice when non-confirmed user logs in


How would one redirect a non confirmed user on login to a certain page instead of showing a :notice ( " you have to confirm your account " ). Using the Devise gem (latest)

This question: ( Devise - Redirected to page if account isn't confirmed ) provides this solution:

# config/initializers/my_strategy.rb
Warden::Strategies.add(:my_strategy) do 
  def valid? 
    true
  end 

  def authenticate! 
    u = User.find_for_authentication(:email => params[:email])
    if u.nil? || !u.valid_password?(params[:password])
      fail(:invalid)
    elsif !u.confirmed?
      fail!("Account needs confirmation.")
      redirect!("your_root_url")
    end
  else
    success!(u)
  end    
end

#config/initializers/devise.rb
config.warden do |manager|  
  manager.default_strategies(:scope => :user).unshift :my_strategy
end

which does not work.


Solution

  • I fixed it like in example below BUT I would like to know if its possible to pass the User object ( username ) inside this method so I can redirect to /confirm/ using devise user model user.username or user.login..

      config.warden do |manager|
        manager.failure_app = CustomFailure
      end
    
      class CustomFailure < Devise::FailureApp
        def redirect_url
            if warden_message == :unconfirmed
              "/confirm"
            else
              super
            end
          end