2012-04-30 8 views
3

YesodのOpenId実装で認証した後、ユーザーの電子メールアドレスを取得する方法はありますか?Yesodからの電子メールアドレスの取得OpenID

私のテストアプリケーションでは、リダイレクトと認証が正しく行われ、maybeAuthIdが私のIDをデータベースの対応するエントリに渡します。ただし、そのアイデンティティーはURLとして格納されます。

私はこれで作業できますが、他のOpenIdパッケージで許可されている実際の電子メールを取得することもできればうれしいです。 YesodのOpenIdでこれは可能ですか? authOpenIdExtendedで何かできることはありますか(使用方法が不明)?

答えて

2

再びこのに見た後、私は答えた:私は、このページからこれらの値を見つけ

authPlugins _ = [authOpenIdExtended [("openid.ns.ax", "http://openid.net/srv/ax/1.0"), 
            ("openid.ax.mode", "fetch_request"), 
            ("openid.ax.type.email", "http://axschema.org/contact/email"), 
            ("openid.ax.required", "email") 
            ]] 

https://developers.google.com/accounts/docs/OpenIDし、それらを検証し

はまず、我々は右のパラメータでauthOpenIdExtendedを使用する必要がありますがGoogleとYahooと連携する

次に、取得した電子メールアドレスを使用するために、getAuthIdに渡されたcredsパラメータの "credsExtra creds"を呼び出します。これにより、OpenIdプロバイダからの応答を含むタプルのリストが得られます。上記のパラメータをauthOpenIdExtendedに使用すると、値が「openid.ax.value.email」(Yahooの場合)または「openid.ext1.value.email」(Googleの場合)という値を持つキー/値タプルでメールが検索されます。私はGoogleも "openid.ax.value.email"キーを使うことを期待していましたが、十分に近いです。

私はこれが誰かを助けてくれることを願っています。

3

GoogleEmailモジュールをご覧ください。あなたが念頭に置く必要があることの1つは、必ずしもすべてのOpenIDプロバイダをそこから信頼できるとは限りません。電子メールアドレスを重要なものに使用すると、悪意のあるユーザーはOpenIDプロバイダを設定して、自分が望むアドレスを要求することができます。

+0

私はauthOpenIdExtended(GoogleEmail.hsのオプションのリストをコピーする)の使い方を理解していると思いますが、ハンドラに戻ったらメールアドレスを取得する方法はわかりません。 GoogleEmail.hsのlookupGetParamが呼び出されましたが、私のコードに戻ってしまったのは遅すぎですね。私は何が起こっているのを誤解していますか?それが問題なら、私はyesod-auth 1.0.1を使用しています(新しいものは動作しません)。 –

+0

あなたはまた重要な何かのために電子メールアドレスを使用しないことについて非常に良い点を作る。私のIDはOpenIdを介して返されたIDに基づいています。私は便宜のために電子メールアドレスを取得したいだけです。 –

+0

私はauthOpenIdExtended経由で試したことはありませんが、[credsExtra](http://hackage.haskell.org/packages/archive/yesod-auth/1.0.2/doc/html/Yesod-Auth.html#v :credsExtra)に必要な情報があります。 –

関連する問題