需要有关更简化设计用户身份验证的建议吗?

时间:2016-04-10 13:03:08

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用设计宝石在Rails 4中开发一个内部网站点。我目前所处的是一个根页面,提示用户登录以便能够访问不同的模块页面。

现在回答我的问题:除了在每个页面上种植if user_signed_in?之外,是否有更优雅的方式来验证用户?如果我必须在登录表单之外的每个页面上使用它,我会有点麻烦。

4 个答案:

答案 0 :(得分:1)

您可以在应用程序控制器中设置before操作。

class ApplicationController < ActionController::Base
  before_action :require_login
end

对于不需要signed_in用户的控制器/操作,您可以使用skip_before_action,例如。

class FooController < ApplicationController
  skip_before_action :require_login, only: [:index]
end

答案 1 :(得分:1)

您可以使用devise gem进行身份验证:

class ApplicationController < ActionController::Base

    before_action :authenticate_user!
    ...

end

如果您愿意,可以使用以下命令跳过任何控制器操作中的身份验证:

skip_before_filter :authenticate_user! 

skip_before_filter :authenticate_user!, :except => [:action1, :action2]

答案 2 :(得分:0)

您可以使用像Pundit或CanCanCan这样的授权宝石,它可以与Devise集成,并允许您在单独的策略文件中设置对方法等的限制。

看看这个

https://github.com/RailsApps/rails-devise-pundit

答案 3 :(得分:0)

authenticate_user!方法上使用前置过滤器:

<强>控制器:

before_filter :authenticate_user!, only: :protected_page

def protected_page
# ...
end

如果用户未登录,系统会指示他们登录。