Rails and Devise:成功登录后如何将用户重定向回请求的页面?
Posted
技术标签:
【中文标题】Rails and Devise:成功登录后如何将用户重定向回请求的页面?【英文标题】:Rails and Devise: How to redirect user back to the requested Page after successful login? 【发布时间】:2021-07-24 08:29:41 【问题描述】:我使用的是https://guides.rubyonrails.org/v2.3/action_controller_overview.html#other-ways-to-use-filters中描述的成语
# /app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter do |controller|
redirect_to new_login_url unless controller.send(:logged_in?)
end
end
现在如果登录过程成功了,如何
-
我可以检查一下,b)
如何将用户重定向到请求的控制器操作?
如何通过 AJAX 和 JSON 进行此登录过程?
编辑:我也收到以下错误消息
uninitialized constant ApplicationController::LoginFilter
当我使用6.2 Other Ways to Use Filters
中建议的更精细的解决方案而不是上面的解决方案时,我的控制器看起来像这样
# /app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_return_path, LoginFilter
def set_return_path
return if devise_controller?
session['user_return_to'] = request.url unless current_user
end
class LoginFilter
def self.filter(controller)
unless controller.send(:logged_in?)
controller.flash[:error] = "You must be logged in"
controller.redirect_to controller.new_login_url
end
end
end
end
谢谢
冯·斯波茨
【问题讨论】:
【参考方案1】:您可以在保存请求页面网址的application_controller.rb
中添加before_action
:
class ApplicationController < ActionController::Base
before_action :set_return_path
def set_return_path
return if devise_controller?
session['user_return_to'] = request.url unless current_user
end
end
然后用户登录成功后重定向到这个url:
class SessionsController < Devise::SessionsController
def after_sign_in_path_for(resource)
return root_url if session['user_return_to'].blank?
session['user_return_to']
end
end
【讨论】:
非常感谢! “还有 2 条路要走” @vonspotz 您可以检查控制器中的current_user
变量,如果设置了则表示用户已登录。如果是nil
,则表示用户未登录。
请 Sachin,告诉我,这个 SessionController 在哪里?显然,我阅读的教程并没有涵盖这一点。祝你好运!
SessionsController 是 UsersController 的替代品吗?
@vonspotz SessionsController 是devise
gem 的控制器,在这里您需要覆盖after_sign_in_path_for
方法定义。它可以完全按照我在示例中定义控制器的方式完成。以上是关于Rails and Devise:成功登录后如何将用户重定向回请求的页面?的主要内容,如果未能解决你的问题,请参考以下文章
Rails & Devise:如何在没有布局的情况下呈现登录页面?
在 Rails 4 上登录后,ngrok、pow 和 devise 会导致重定向到本地 URL
每次使用 Rails 3 中的 Devise 登录时,如何检查用户帐户?
Rails 3 using Devise:如何允许某人使用他们的 Facebook 帐户登录?
devise 和 rspec-rails - 如何在请求类型规范(带有 type: :request 标记的规范)中登录用户?