私はRails 4.2.3を使用しています。私は、GoogleとFacebookを使って自分のシステムのユーザーを認証(および作成)したいと考えています。だから私は、私はすでに伐採時にRailsアプリケーションで重複したユーザーが作成されないようにするにはどうすればよいですか?
id | provider | uid | name | oauth_token | oauth_expires_at | created_at | updated_at | email
----+---------------+-----------------------+---------------+-------------+------------------+----------------------------+----------------------------+-------------------------
5 | google-oauth2 | 777711643329020555465 | Dave A | | | 2016-05-10 20:08:59.182744 | 2016-05-10 20:08:59.182744 | [email protected]
以下のように、私のデータベース内の行を持っている場合は、上記の問題点がある
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
...私のアプリ/モデル/ user.rbファイルでこれを持っています上記の方法を呼び出すと、同じデータで2番目の行が作成されます。誰もが私のデータベースの行が既にある場合、上記のメソッドを呼び出すと、2番目の、重複したユーザーを作成しないようなものを微調整するために何ができるか知っていますか?
おかげで、 - Daveは
編集:ここではでは、GoogleのOAuth経由でログインした後
がid | provider | uid | name | oauth_token | oauth_expires_at | created_at | updated_at | email
----+---------------+-----------------------+---------------+-----------------------------------------------------------------------------+---------------------+----------------------------+----------------------------+-------------------------
5 | google-oauth2 | 777711643329020555465 | Dave A | | | 2016-05-10 20:08:59.182744 | 2016-05-10 20:08:59.182744 | [email protected]
7 | google_oauth2 | 777711643329020555465 | D. A. | ya29.CjLeAiJ--FTY1UhMwXdb7yk74hhdCH4O6sz3ewbG8wBNdmRHAJWZ0esoS0yZLp5fXmS60Q | 2016-05-10 21:49:55 | 2016-05-10 20:49:57.277341 | 2016-05-10 20:49:57.277341 | [email protected]
私はあなたが示唆したようにしましたが、それでも動作しませんでした。私は私の質問に私のテーブルに含まれるデータを含めました。名前、oauthトークン、oauth expiresフィールドは異なりますが、UID、プロバイダ、電子メールが同じであるため、重要ではないと私は考えていました。 – Dave
'first_or_create'に重複チェックを実行させたいカラムを指定する必要があります。これは' uid'フィールドだけにあると思います。ドキュメントを見てください:http://apidock.com/rails/ActiveRecord/Relation/first_or_create – Augusto