繁体   English   中英

如何在Rails的AJAX调用中检查用户是否已通过Devise进行身份验证?

[英]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.

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