代码之家  ›  专栏  ›  技术社区  ›  Krzysztof Kozmic

ASP.NET MVC 2应用程序中对DotNetOpenAuth的声明为空

  •  1
  • Krzysztof Kozmic  · 技术社区  · 14 年前

    我正在尝试让DotNetOpenAuth(最新版本)使用ASP.NET MVC 2网站。 我得到第一部分工作,当用户选择OpenID提供者时调用该操作,我得到正确的标识符传入,然后我得到正确的重定向到提供者网站,我被重定向回我的网站,但这是问题所在。

    我请求的声明为空(请参阅下面的代码)。

    public ActionResult TryAuth(string openid_identifier)
    {
        var openid = new OpenIdRelyingParty();
        var response = openid.GetResponse();
        if(response== null)
        {
            var req = openid.CreateRequest(openid_identifier);
            req.AddExtension(new ClaimsRequest
                                {
                                    Email = DemandLevel.Require,
                                    Nickname = DemandLevel.Require
                                });
            return req.RedirectingResponse.AsActionResult();
        }
        switch(response.Status)
        {
            case AuthenticationStatus.Authenticated:
                {
                    var data = response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
                    // data is null <-----------------------------------------
                    return View("Index");
                }
        }
        return View("Index");
    }
    

    如果有人能指出我犯的(不是这样)明显的错误,我将不胜感激。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Community Navdeep Singh    7 年前

    请看一下所有类似的问题。 Refer this

    你的代码看起来不错。确定你 activate the AXFetchAsSregTransform 不过,在web.config文件中,最大程度地提高了您得到东西的机会。不过,由提供者提供任何属性。像雅虎这样的一些提供商要求你的RP正确地实现RP发现,DotNetOpenAuth附带的示例RPS演示了这一点。

    这里是 my blog post on getting RP Discovery done right . 执行此操作,然后再次尝试您正在测试的站点。请记住,有些提供程序缓存RP发现结果,因此您可能会应用所有RP发现修复程序,并且仍然需要等待一个小时或一天,然后提供程序才会开始向您提供数据。

        2
  •  5
  •   Jaime Botero    13 年前

    我也有同样的问题,直到我发现对于google,你必须将email字段设置为domainlevel.require而不是domainlevel.request(可选)

    fields.Email = DemandLevel.Require;