使用Devise修改确认

时间:2010-12-21 17:33:01

标签: ruby-on-rails devise

我想通过Devise在用户确认时设置一个布尔标志。基本上我想将用户设置为“活动”。但是,Devise只需确认帐户并将其记录下来。

如何创建某些类型的回调以更新我的用户记录,以便在确认后将“有效”列设置为true?

非常感谢任何帮助!

3 个答案:

答案 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。