Redirect after sign in with Devise

2020-02-08 03:34发布

问题:

Is it possible to redirect users to different pages (based on role) after signing in with Devise? It only seems to redirect to the root :to => ... page defined in routes.rb

Thanks!

回答1:

By default Devise does route to root after it's actions. There is a nice article about overriding these actions on the Devise Wiki, https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

Or you can go even farther by setting stored_locations_for(resource) to nil, and then have different redirects for each action, ie: after_sign_up_path(resource), after_sign_in_path(resource) and so on.



回答2:

simply you can add this method in to your application controller

def after_sign_in_path_for(resource)
  user_path(current_user) #your path
end


回答3:

only paste the below code to the application controller or any controller , you need to do the operation;

def after_sign_in_path_for(resource)
    users_path
end


回答4:

Devise has a helper method (after_sign_in_path_for) which can be used to override the default Devise route to root after login/sign-in.

To implement a redirect to another path after login, simply add this method to your application controller.

#class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
  users_path
end

Where users_path is the path that you want it to redirect to, User is the model name that corresponds to the model for Devise.

N/B: If you used Admin as your model name for Devise, then it will be

#class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
  admins_path
end

That's all.

I hope this helps



回答5:

https://github.com/heartcombo/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in,-sign-up,-or-sign-out

I used example 1:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  before_action :authenticate_user!

  protected

  def after_sign_in_path_for(resource)
    current_user.is_a?(Admin) ? admin_tests_path : (stored_location_for(resource) || root_path)
  end
end


回答6:

Here's what I believe is the answer you are looking for from the devise wiki:

How To: Change the default sign_in and sign_out routes