6

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

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

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

4

2 回答 2

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 个字符的密码,我们使用我们的默认用户模型与设计就好了。只需以类似的方式为您的用户设置密码就是我的方法,因为您永远不会使用他们的密码。此外,如果您改变主意并希望他们能够登录,您只需更改数据库中的用户密码并构建登录表单,其余的工作将由 devise 完成。

于 2011-04-08T15:13:17.227 回答
2

布雷特回答的另一个选择是覆盖 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

于 2013-05-01T19:31:37.987 回答