【发布时间】:2018-08-07 10:31:05
【问题描述】:
我将 Rails 堆栈用于
- 设计
- 典狱长
- 已确认
现在我有一些与电子邮件确认和未验证用户访问权限相关的要求。假设有 3 类页面:
-
case 1- 不需要身份验证。 -
case 2- 需要身份验证,还需要确认用户。 -
case 3- 需要身份验证(正确的用户名和密码组合),但无需确认用户即可访问它们。
通过设计和确认,实现case 1 和case 2 轻而易举。用户登录/注册后,我会重定向到“确认您的电子邮件页面”。
我的问题是case 3。假设用户进行他的登录/注册。他尚未确认他的电子邮件地址,但应该被允许访问某些case 3 路线。当他访问案例 3 路线时,我期望:
- 无重定向
- 有效会话
可确认的设计要么允许已确认的用户访问所有页面,要么不允许访问所有页面。它不允许通过身份验证但未经确认访问某些页面。
我尝试通过实现这个逻辑来覆盖设计confirmed?:
class ApplicationController < ActionController::Base
before_filter :verify_user
def verify_user
$flag = true if CERTAIN_ROUTES.include?(action_class)
end
end
class User < ActiveRecord::Base
def confirmed?
$flag || !!confirmed_at
end
end
这几乎不适用于登录,但不适用于注册。此外,这是实现它的一种非常糟糕的方法。我应该如何解决这个问题?其他功能正常。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 devise warden devise-confirmable