我試圖從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樣品,我已經做的WebForms樣品相同和回來請求的電子郵件!但是,由於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版本會生成一個包含所有附加內容的URL,而MVC URL缺少此信息。最終結果是電子郵件被呈現給WebForms,而MVC應用程序則沒有。
我注意到的最後一件事是例如Google展示了一個WebForms應用程序的localhost
和一個MVC應用程序的127.0.0.1
。也許這會造成一切變化。不過,我不確定我是否在這裏控制。
困擾我的事情是,兩個項目的代碼是相同的。仍然生成的URL是不同的,MVC沒有收到電子郵件。
這很好!謝謝! – wpfwannabe