2016-06-20 9 views
0

私はユーザーが電子メールで登録できるようにDeviseを設定しました。今、私はomniauthでLinkedIn経由でログインしました。したがって、私はプロバイダーとuidをusersテーブルに保存しなければなりませんでした。E-MailサインアップとOAuthログイン - Devise on Railsでセットアップする方法

私が今問題にしていることは、プロバイダとuidの組み合わせが一意であることです。しかし、ユーザーが電子メールで登録することを決めたときには、プロバイダとユーザーIDの値はありません。どのようにしてこの問題に対処できますか?

私はRailsを初めて使っていて、他の回答は見つかりませんでした。

ありがとうございます!私はおそらく、プロバイダにmanualを記入してSecureRandom.uuidとUIDを生成するhttps://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

答えて

0

はここrequest.env['omniauth.auth']

詳細からそれを取得します。

Userモデルでbefore_validationフックを使用してこれを行うことができます。

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    before_validation(on: :create) do 
    if self.provider.nil? 
     self.provider = 'manual' 
     self.uid = SecureRandom.uuid 
    end 
    end 

... 

end 

また、ユーザーを作成するコントローラに接続することもできます。

ユーザーが同じ電子メールで2回サインアップするのを防ぐためにuidが必要な場合は、電子メールアドレスのsha256ハッシュを使用します。

0

+0

ありがとうございます!私はそれを試みる! –

+0

私はそれが今働いている。サインアップフォームに隠しフィールドを追加して、作成アクションにパラメータプロバイダとuidを含める必要がありました。しかし、あなたの提供するソリューションは魅力的に機能しました!どうもありがとう! –

関連する問題