清理警卫的例子似乎都检查signed_in?
。这让我感到困惑,因为看起来signed_in?
似乎不应该设置为true,直到用户通过了后卫。我认为警卫的全部意义是防止登场。
class EmailConfirmationGuard < Clearance::SignInGuard
def call
if unconfirmed?
failure("You must confirm your email address.")
else
next_guard
end
end
def unconfirmed?
signed_in? && !current_user.confirmed_at
end
end
答案 0 :(得分:1)
如果用户是$student->id
,我想不出你想要运行防护堆栈的原因,所以我不确定。我认为这可能是实施的意外。
创建会话时,我们这样做:
nil
如果def create
@user = authenticate(params)
sign_in(@user) do |status|
if status.success?
redirect_back_or url_after_create
else
flash.now.notice = status.failure_message
render template: "sessions/new", status: :unauthorized
end
end
end
返回authenticate
,我们仍然会进入堆栈。我们应该考虑不这样做。如果您在清除存储库本身上打开一个问题,我们可以将其视为Clearance 2.0的更改