码农家园

关闭
导航

关于 c#:GetExternalLoginInfoAsync null with OWIN in ExternalLoginCallback 除非已经登录谷歌


asp.netasp.net-mvcc#loginowin

GetExternalLoginInfoAsync null with OWIN in ExternalLoginCallback unless already logged into google

我一直在尝试使用 Google 帐户在 MVC5 应用程序中使用 OWIN 实现外部登录。

如果我已经登录谷歌,在我的应用程序中点击谷歌按钮就可以了,在允许我访问登录信息后,它会将我带到我的注册页面。

如果我在单击我的应用程序 google 按钮时尚未登录到 google,则会提示我按预期使用 Google 登录,但回叫接收器似乎没有看到我已登录为在这种情况下,logininfo 在回调中始终为空,如下所示...

1
2
3
4
5
6
7
8
9
10
11
12
13
    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

         if (loginInfo == null)
        {
            return RedirectToAction("Login");
        }

        // Code omitted for brevity.
        }
    }

有人有解决方法或解释吗?这几乎就像在登录谷歌后的请求之前,OWIN 无法使用外部 cookie。

相关讨论

  • OWIN 的可能副本在 Google 或 facebook 的 MVC5 应用程序中始终返回 Null


经过几天的调查,我终于找到了答案。问题似乎是登录谷歌后,它重定向回该站点并且没有登录谷歌的权限,因此被重定向回登录页面。如果已经登录谷歌,不知道为什么会这样。我是在找到这篇文章后才发现的……

http://blog.technovert.com/2014/01/google-openid-integration-issues-asp-net-identity/

我将以下内容添加到我的配置文件中。

1
2
3
4
5
6
7
<location path="signin-google">
 <system.web>
   
     
   </authorization>
 </system.web>
</location>

它现在可以工作了……

相关讨论

  • 如果已经登录 Google,您可能会完全避免外部登录回调,而只是被重定向到应用程序。回调是调用身份验证 API 的重定向。
  • 这实际上是无关紧要的; OWIN 在此处尝试配置的答案之外为您处理此 URL。请参阅我对以下问题的回答:stackoverflow.com/a/29921451/176877
  • 这很可能是由于启用了窗口身份验证,它不应该用于使用 google auth 的 MVC 应用程序。


Copyright ©  码农家园 联系:[email protected]