[英]How to check if a user is authenticated with Devise on an AJAX call in rails?
我有一个按钮,允许一个人加入一个组(在我的应用程序中称为“ pod”)。 该按钮使用remote:true进行AJAX调用。 我有一个联接表,用于使用has_many:尽管管理用户和pod之间的关系。 在联接表控制器中,我希望能够在该用户可以加入Pod之前检查该用户是否已通过身份验证。 如果未通过身份验证,则应将用户带到登录页面,然后返回列出了所有Pod的页面。
现在,我在pod_users_controller中有以下代码:
before_action :user_logged_in
...
private
def user_logged_in
render :js => "window.location = '#{new_user_session_path}'" unless user_signed_in?
end
在我的应用程序控制器中,我有以下代码将用户重定向回验证之前的页面:
def store_location
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
这是一种作品,但感觉非常片状。 例如,我有另一个按钮,可让您使用AJAX引导程序模式创建新组。 我已经尝试过使用与pods_controller文件中的before_action:user_logged_in相同的方法。 它弹出不带形式的模态,然后重定向。 或者,当我单击加入按钮时,如果在此之前单击“启动容器”按钮,它将把我重定向到表单以创建一个新容器。
我的问题是,有没有更好的方法来做我在做的事情? 如何在弹出弹出窗口之前重定向到登录名? 我只是在学习红宝石和铁轨,所以任何最佳实践将不胜感激。 同样,这是一个附带的问题,但是在这种方法中,我有相同的方法,即从两个控制器中调用“ user_logged_in”。 现在,我在两种方法的底部都有该方法。 我假设有一个地方可以放置它,以便多个控制器从一个地方可以访问它?
谢谢!
我在Rails 4.2和Devise 3.4上
Devise带有以下帮助器: https : //github.com/plataformatec/devise#controller-filters-and-helpers
其中包括before_action :authenticate_user!
以及user_signed_in?
帮助程序(几乎与您的名字相同),可在整个应用程序中使用。 您可以使用user_signed_in?
从带有ERB的视图中或在控制器中重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.