繁体   English   中英

指定Devise登录的返回URL作为查询字符串参数

[英]Specify Return URL for Devise Login as a Query String Parameter

Ruby on Rails,使用Devise进行身份验证。 我了解Devise包含开箱即用的深层链接,但是它要求用户首先导航到需要对其进行身份验证的URL。

该用例无法满足我的需求,我想知道是否存在提供查询字符串参数的选项,以便在登录后将用户重定向到当前页面。登录可为页面添加功能,但不能不需要。

您可以扩展Devise::SessionsController使其适合您的需求。 如果您查看源代码 ,则在成功登录后,Devise将使用after_sign_in_path_for将用户重定向到特定路径。

假设您拥有的资源是一个User

routes.rb ,指定Devise应该使用的路由器:

devise_for :users, controllers: {sessions: 'sessions'}

然后在app/controllers/sessions_controller中创建一个继承自Devise::SessionsController app/controllers/sessions_controller ,并覆盖after_sign_in_path_for

class SessionsController < Devise::SessionsController

  protected

  def after_sign_in_path_for(resource)        
    params[:redirect_path].presence || stored_location_for(resource)
  end
end

在新的会话形式( app/views/devise/sessions/new.html.erb )中,添加一个隐藏标签,该标签将redirect_path参数中继到控制器:

<%= hidden_field_tag :redirect_path, params[:redirect_path].presence %>

现在,如果用户访问new_user_session_path(redirect_path: some_path) ,则应在成功登录后将其重定向到所需的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM