OpenIDプロバイダから少なくとも電子メールを取得しようとしている間に、DotNetOpenAuth ASP.NET MVC Login
サンプルを拡張しました。どのプロバイダを使ってログインしてもnull
はClaimsResponse
になります。ここにコードがあります。DotNetOpenAuthで成功したOpenIDログイン時に電子メールが返されないASP.NET MVCログインサンプル
var request = openid.CreateRequest(Request.Form["OpenID"]);
// Require some additional data
request.AddExtension(new ClaimsRequest
{
Email = DemandLevel.Require,
});
return request.RedirectingResponse.AsActionResult();
そして、これはClaimsResponse
取得するスニペットです:
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
var claimsResponse = response.GetExtension<ClaimsResponse>();
// This is null!
break;
}
MVCのサンプルでこれをしようとする前に、私はWebフォームのサンプルで同じを行って、バック要求された電子メールを持っています!しかし、OpenID関連のコードは事実上同じなので、これは間違っているのは本当に難しいです。
私は、生成されたOpenIDのURLが次の点で異なることに気付きました:openid.ns.alias3=http://openid.net/srv/ax/1.0&openid.alias3.required=alias1,alias2,alias3,alias4&openid.alias3.mode=fetch_request&openid.alias3.type.alias1=http://axschema.org/contact/email&openid.alias3.count.alias1=1&openid.alias3.type.alias2=http://axschema.org/namePerson&openid.alias3.count.alias2=1&openid.alias3.type.alias3=http://schema.openid.net/contact/email&openid.alias3.count.alias3=1&openid.alias3.type.alias4=http://schema.openid.net/namePerson&openid.alias3.count.alias4=1
。基本的にWebFormsのバージョンは、MVC URLにこれがない間に追加されたURLをすべて生成します。正味の効果は、電子メールがWebフォームに提示され、MVCアプリケーションの場合は存在しないということです。
最後に気づいたのは、 Googleのリクエストは、WebFormsアプリの場合はlocalhost
、MVCアプリの場合は127.0.0.1
となります。多分それはすべての違いを作ります。それでも、私がここで支配しているかどうかはわかりません。
私が気にすることは、コードが両方のプロジェクトで同じことです。それでも生成されるURLは異なり、MVCは電子メールを取得しません。
これはうまく動作します!ありがとう! – wpfwannabe