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