0

現在、devise と omniauth を使用して gmail openID を使用して認証するアプリケーションがあります。ここで、各ユーザーに一意のユーザー ID を割り当てたいと思います。そのため、引き続き gmail 資格情報を使用してログインしますが、参照されるユーザー ID を持つことになります。

それを自分のスキーマに追加するにはどうすればよいですか?

4

1 に答える 1

0

ユーザー テーブルを作成したときに、移行スクリプトによってデフォルトで 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 
于 2011-02-07T04:06:00.820 に答える