rails gem: OmniAuth を使用してユーザーをログインさせています。
OpenId プロバイダーを使用する場合、メールやニックネームなどの特定のフィールドを取得したいのですが、これに関するドキュメントはありません。
何か案は?
ありがとう
rails gem: OmniAuth を使用してユーザーをログインさせています。
OpenId プロバイダーを使用する場合、メールやニックネームなどの特定のフィールドを取得したいのですが、これに関するドキュメントはありません。
何か案は?
ありがとう
そのデータを要求する方法、または確実に取得する方法を尋ねていますか? OpenID AX 属性を使用してデータを要求できますが、OpenID プロバイダーは要求に応答する義務はありません。ただし、これは役立つはずです。
Rails で Google / Yahoo から OpenID AX 属性を取得する
Google は次の場合にのみメールで応答するようです
http://schema.openid.net/contact/email
一方、Yahooは返信します
http://axschema.org/contact/email
Ryan BatesによるこのRailscast(終わりに向かって)は、 OpenIDを介して認証するときに電子メールアドレスをキャプチャするのに役立つ場合があります。その他の利用可能なフィールドについては、認証リクエストを行うときに、認証コントローラーに次のようなものを追加できると思います
# authentications_controller.rb
...
def create
omniauth = request.env["omniauth.auth"]
raise omniauth.to_yaml
...
end
...
次に、openIDを介してログインし、使用できるオプションを確認します。
これについては、Devise omniauth 統合ドキュメントの「Google」openID セクションにいくつかの手順があります。
https://github.com/plataformatec/devise/wiki/OmniAuth:-概要
find_for_open_id
ユーザー モデルのクラス メソッドと、データがハッシュUsers::OmniauthCallbacksController
からどのように渡されるかについてのコントローラー サブクラスを探します。request.env["omniauth.auth"]
これは、Google だけでなく、あらゆる OpenID 戦略に関連しています。
OpenID プロバイダーに要求する属性を正確にカスタマイズするという点では、gem の独自のクローンを作成するomniauth_openid
か、それをサブクラス化し、options
. (参照: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb )
request.env['omniauth.auth'] には必要なものが含まれているはずです。Twitterの場合、次のようなものを返します
{
'uid' => '12356',
'provider' => 'twitter',
'user_info' => {
'name' => 'User Name',
'nickname' => 'username',
# ...
}
}
openid を調べるだけです。
request.env['omniauth.auth'] には、コールバックからの応答全体が含まれます。ただし、すべてのプロバイダーがユーザーのメールを返すわけではありません (Twitter は返さない)。google または yahoo 経由の OpenID では、'user_info' ハッシュの一部として電子メールが含まれている必要があります。