Ruby on rails 如果注册过程中测试失败,Rails将阻止用户帐户

Ruby on rails 如果注册过程中测试失败,Rails将阻止用户帐户,ruby-on-rails,devise,Ruby On Rails,Devise,我想建立用户注册流程,用户注册到blog_应用程序,在帐户确认(通过电子邮件链接)后,他/她将能够登录,但如果他/她没有通过法律测试,将无法访问其帖子(在用户帐户被确认后,在他们可以做任何其他事情之前,应该向他们出示法律测试,用户只需通过一次测试)。 为了认证,我使用Deviate gem 我想知道我是否应该在这种情况下使用一些Desive内置模块?或者我应该在Users表中创建附加的DB列,其状态为:状态:“已通过”或状态:“失败”,并在用户未通过法律测试的情况下使用pundit策略阻止访问?

我想建立用户注册流程,用户注册到blog_应用程序,在帐户确认(通过电子邮件链接)后,他/她将能够登录,但如果他/她没有通过法律测试,将无法访问其帖子(在用户帐户被确认后,在他们可以做任何其他事情之前,应该向他们出示法律测试,用户只需通过一次测试)。 为了认证,我使用Deviate gem


我想知道我是否应该在这种情况下使用一些Desive内置模块?或者我应该在Users表中创建附加的DB列,其状态为:
状态:“已通过”
状态:“失败”
,并在用户未通过法律测试的情况下使用pundit策略阻止访问?

是的,您应该使用类似pundit的授权gem来管理授权

要在Desive中完成类似的任务,您需要为“通过的用户”和“失败的用户”分别扮演不同的角色。这将很快变得混乱和混乱,因为这并不是它的目的


使用类似Pundit的授权gem是您用例的一种方式。

是的,您必须添加一个新的列,如
status
,在其中存储状态,然后覆盖设备的
active\u进行身份验证?
方法,这样,如果用户被标记为失败/禁止,则不允许登录:

def active_for_authentication?
  super && self.status != 'failed'
end

是的,但是如果一个用户没有通过法律测试,我必须给他一个再次参加测试的机会(用户将有3次尝试通过测试)。我认为我应该使用Desive和Pundit策略的组合。明白了。添加列
status
并编写一些逻辑就足够了。