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 文字のパスワードを生成するだけで、デフォルトの User モデルをデバイスで問題なく使用しています。ユーザーに同様の方法でパスワードを設定するだけが私のアプローチです。パスワードを使用することは決してないからです。また、気が変わってログインできるようにしたい場合は、データベース内のユーザーのパスワードを変更してログインフォームを作成するだけで、あとは devise が処理してくれます。

于 2011-04-08T15:13:17.227 に答える
2

ブレットの答えにさらに別のオプションは、password_required? を上書きすることです。User モデルのメソッド。

def password_required?
    super && provider.blank?
end

複数の omniauth プロバイダーを保存する場合、このようなものも機能するはずです。

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

このソリューションの Devise と Omniauth に関する Ryan Bates の railscast の功績: http://railscasts.com/episodes/235-devise-and-omniauth-revised

于 2013-05-01T19:31:37.987 に答える