如何仅在Devise中为用户添加电子邮件

时间:2011-04-08 13:23:32

标签: ruby-on-rails devise subscribe

我希望我的用户能够通过仅提供电子邮件地址来“订阅”,而不必强迫他们使用密码注册,除非他们愿意。

我可以添加自己的验证设置以允许此操作,但我怀疑如果我开始添加没有密码的用户或使用我自己的“未注册”字段标记它们,它会干扰Devise其余部分的工作方式。

目前最简单的解决方案似乎是将这些用户放在一个不同的表中,但这有一点点气味。有什么想法吗?

2 个答案:

答案 0 :(得分:20)

我有一个类似的应用程序 - 我们使用Open ID和OAuth专门用于登录,当我们存储用户的电子邮件地址(Google帐户或Facebook在身份验证期间将其发回)时,他们从不登录使用它,所以不要有/需要密码。

这是对用户通过Facebook注册时发生的事情的回调:

  User.create!( :facebook_id => access_token['uid'],
                :email => data["email"], 
                :name => data["name"], 
                :password => Devise.friendly_token[0,20])

Devise.friendly_token[...]只为用户生成一个随机的20个字符的密码,我们正在使用我们的默认用户模型和设计。只是以类似的方式在用户上设置密码将是我的方法,因为您永远不会使用他们的密码。此外,如果您改变主意并希望他们能够登录,您只需更改数据库中的用户密码并构建登录表单,设计将负责其余部分。

答案 1 :(得分:2)

Brett回答的另一个选择是覆盖password_required?用户模型上的方法。

def password_required?
    super && provider.blank?
end

如果你存储了多个omniauth提供者,那么这样的事情也应该有效。

def password_required?
    super && self.omniauth_credentials.empty?
end

对于此解决方案,Ryan Bates对Devise和Omniauth的轨道广播完全赞同:http://railscasts.com/episodes/235-devise-and-omniauth-revised