3

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

私のテスト アプリでは、リダイレクトと認証が正しく行われ、おそらくAuthId によって、データベース内の対応するエントリの ID が返されます。ただし、その ID は URL として保存されます。

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

4

2 に答える 2

3

GoogleEmailモジュールを見てください。心に留めておく必要があることの 1 つは、すべての OpenID プロバイダーを必ずしも信頼できるとは限らないということです。重要なことに電子メール アドレスを使用すると、悪意のあるユーザーは OpenID プロバイダーを設定して、自分が望むアドレスを要求できるようにすることができます。

于 2012-04-30T03:33:23.810 に答える
2

これをもう一度調べたところ、次の答えが見つかりました。

まず、正しいパラメーターで authOpenIdExtended を使用する必要があります。

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そして、それらが Google と Yahoo で動作することを確認しました。

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

これが誰かに役立つことを願っています。

于 2012-06-28T01:56:01.417 に答える