我希望我的用户能够通过仅提供电子邮件地址来“订阅”,而无需强制他们使用密码进行注册,除非他们愿意。
我可以添加自己的验证设置来允许这样做,但我怀疑如果我开始添加没有密码的用户或用我自己的“未注册”字段标记他们,它会干扰 Devise 其余部分的工作方式。
目前,最简单的解决方案似乎是将这些用户放在不同的表中,但这有点味道。有任何想法吗?
我希望我的用户能够通过仅提供电子邮件地址来“订阅”,而无需强制他们使用密码进行注册,除非他们愿意。
我可以添加自己的验证设置来允许这样做,但我怀疑如果我开始添加没有密码的用户或用我自己的“未注册”字段标记他们,它会干扰 Devise 其余部分的工作方式。
目前,最简单的解决方案似乎是将这些用户放在不同的表中,但这有点味道。有任何想法吗?
我有一个执行类似操作的应用程序 - 我们专门使用 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 个字符的密码,我们使用我们的默认用户模型与设计就好了。只需以类似的方式为您的用户设置密码就是我的方法,因为您永远不会使用他们的密码。此外,如果您改变主意并希望他们能够登录,您只需更改数据库中的用户密码并构建登录表单,其余的工作将由 devise 完成。
布雷特回答的另一个选择是覆盖 password_required? 用户模型上的方法。
def password_required?
super && provider.blank?
end
如果您存储了多个omniauth 提供程序,那么这样的东西也应该可以工作。
def password_required?
super && self.omniauth_credentials.empty?
end
此解决方案完全归功于 Ryan Bates 在 Devise 和 Omniauth 上的 railscast: http ://railscasts.com/episodes/235-devise-and-omniauth-revised