現在、devise と omniauth を使用して gmail openID を使用して認証するアプリケーションがあります。ここで、各ユーザーに一意のユーザー ID を割り当てたいと思います。そのため、引き続き gmail 資格情報を使用してログインしますが、参照されるユーザー ID を持つことになります。
それを自分のスキーマに追加するにはどうすればよいですか?
現在、devise と omniauth を使用して gmail openID を使用して認証するアプリケーションがあります。ここで、各ユーザーに一意のユーザー ID を割り当てたいと思います。そのため、引き続き gmail 資格情報を使用してログインしますが、参照されるユーザー ID を持つことになります。
それを自分のスキーマに追加するにはどうすればよいですか?
ユーザー テーブルを作成したときに、移行スクリプトによってデフォルトで id 列が作成されているはずです。この列の値は一意である必要があるため、すべてのユーザーの一意の ID として使用できます。それがニーズを満たさない場合は、データベースに別の列を追加し、データベースにまだ存在しないユーザーを作成するときに、そのフィールドを OmniauthCallbacksController で一意の識別子に設定することができます。
たとえば、deviseページの facebook の例では、OmniauthCallbacksController から呼び出される find_for_facebook_oauth メソッドを変更して、ユーザーの作成時に新しいフィールドを作成することができます。
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token['extra']['user_hash']
if user = User.find_by_email(data["email"])
user
else # Create an user with a stub password.
# Add code here to create unique identifier for the user
# and make sure your field is passed to the create! method
User.create!(:email => data["email"], :password => Devise.friendly_token[0,20])
end
end