我正在使用 Clearance gem 进行身份验证。我在应用程序中有一个页面,我想允许任何人访问,前提是他们在 URL / Session 中有一个安全令牌。他们不必是系统中的用户。
这对 Clearance 可行吗?关于我应该如何进行的任何提示。最初我认为我应该覆盖require_login
and current_user
。这是一个好方法吗?
我正在使用 Clearance gem 进行身份验证。我在应用程序中有一个页面,我想允许任何人访问,前提是他们在 URL / Session 中有一个安全令牌。他们不必是系统中的用户。
这对 Clearance 可行吗?关于我应该如何进行的任何提示。最初我认为我应该覆盖require_login
and current_user
。这是一个好方法吗?
安全令牌页面是否也应该允许登录的人访问,还是每个人都必须拥有安全令牌?
如果您必须拥有安全令牌,无论您是否使用 Clearance 登录,那么我将通过根本不调用require_login
(或者skip_before_action :require_login
如果过滤器已经在控制器的继承树中则调用)来避免该控制器的 Clearance . 然后你可以实现你自己before_action
的检查令牌并做你想做的任何事情。current_user
如果需要,您也可以为此控制器实现自己的。
如果页面还应该允许登录用户,那么我仍然会跳过操作前的许可,而是使用如下内容:
def require_login_or_secret_token
unless params["super_secret_security_token"] == TOKEN
require_login
else
end
然后,如果要current_user
在此操作/视图中使用,则需要覆盖 current_user 以返回来宾对象而不是 nil:
def current_user
super || Guest.new
end