我想通过Devise在用户确认时设置一个布尔标志。基本上我想将用户设置为“活动”。但是,Devise只需确认帐户并将其记录下来。
如何创建某些类型的回调以更新我的用户记录,以便在确认后将“有效”列设置为true?
非常感谢任何帮助!
答案 0 :(得分:1)
假设您的身份验证模型名为User
,您可以执行此操作:
class User < ActiveRecord::Base
def active?
super and (not self.confirmed_at.nil?)
end
end
有了这个,Devise将不会登录用户,但会等到用户确认(如果用户已确认,confirmed_at
字段将为非NULL)
答案 1 :(得分:0)
对于您的特定问题,您最好按照Zabba的建议,将active?
属性设为confirmed_at
为零。
但是这里是如何做你要求的,因为它可能有助于人们在确认后尝试在用户上设置其他值。
class Users::ConfirmationsController < Devise::ConfirmationsController
def show
# let Devise actually confirm the user
super
# if they're confirmed, it will also log them in
if current_user then
# and you can do whatever you want with their record
current_user.active = true
end
end
end
答案 2 :(得分:0)
这基本上是对以下Turadg's Answer的评论。如果您遵循该建议(我做过),当用户尝试使用无效的confirmation_token时,您将遇到一个小问题。您将收到“缺少模板用户/确认/新”。 Devise :: ConfirmationsController在这里做的是将你发送到 devise / confirmations / new 以通知你令牌无效并允许你发送另一个令牌。
由于我已经自定义了Devise视图,我最终解决的这个小问题是将devise / confirmations / new.html.haml文件移动到user / confirmations / new.html下的当前预期位置。 HAML。