2011-08-11 1 views
1

OpenIDプロバイダから少なくとも電子メールを取得しようとしている間に、DotNetOpenAuth ASP.NET MVC Loginサンプルを拡張しました。どのプロバイダを使ってログインしてもnullClaimsResponseになります。ここにコードがあります。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は電子メールを取得しません。

答えて

2

Webフォームサイトのように聞こえますが、AXFetchAsSregの動作は有効になっていますが、MVCの動作はありません。 Activate it for your MVC siteあなたは良いはずです。

+0

これはうまく動作します!ありがとう! – wpfwannabe