使用DotNetOpenAuth ASP成功登录OpenID后不会返回任何电子邮件.NET MVC登录示例



我已经扩展了DotNetOpenAuth ASP.NET MVC Login示例,同时尝试从OpenID提供程序获取至少一封电子邮件。无论我使用哪个提供商登录,ClaimsResponse都会得到null。这是代码。

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应用程序则没有。

我注意到的最后一件事是,例如,谷歌显示的请求似乎来自WebForms应用程序的localhost和MVC应用程序的127.0.0.1。也许这会让一切变得不同。尽管如此,我不确定我是否能控制这里。

让我困扰的是,两个项目的代码都是相同的。尽管如此,生成的URL是不同的,MVC不会收到任何电子邮件。

听起来你的web表单网站已经激活了AXFetchAsSreg行为,但你的MVC网站没有。为你的MVC网站激活它,你应该会很好。

最新更新