我正在使用设计宝石在Rails 4中开发一个内部网站点。我目前所处的是一个根页面,提示用户登录以便能够访问不同的模块页面。
现在回答我的问题:除了在每个页面上种植if user_signed_in?
之外,是否有更优雅的方式来验证用户?如果我必须在登录表单之外的每个页面上使用它,我会有点麻烦。
答案 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集成,并允许您在单独的策略文件中设置对方法等的限制。
看看这个
答案 3 :(得分:0)
在authenticate_user!
方法上使用前置过滤器:
<强>控制器:强>
before_filter :authenticate_user!, only: :protected_page
def protected_page
# ...
end
如果用户未登录,系统会指示他们登录。