OWIN的GetExternalLoginInfoAsync总是返回null。
OWIN的GetExternalLoginInfoAsync总是返回null。
我创建了一个新的MVC5 Web应用程序,当我尝试使用Google或Facebook登录时,AccountController中的ExternalLoginCallback操作被调用,但GetExternalLoginInfoAsync()总是返回null:
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
因为它始终为null,所以它只是重定向回登录页面并重新开始过程。我该如何修复这个问题?
原因:
Nuget包Microsoft.Owin.Security.Facebook的版本3.0.1与Facebook登录不再兼容,导致OWIN的GetExternalLoginInfoAsync方法返回null。
解决方法:
更新Microsoft.Owin.Security.Facebook包到预发布版本3.1.0,可以使用以下命令:
Install-Package Microsoft.Owin.Security.Facebook -Pre
将Microsoft.Owin.Security.Facebook包更新到3.1.0版本后,问题得到解决。以上方法在Stack Overflow上被多个用户确认有效,并且已经有多个用户表示感谢。
问题的原因是没有启用Google+ API。解决方法是在开发者控制台中启用Google+ API,并在Startup.Auth中添加ClientId和ClientSecret。以下是详细步骤:
1. 在开发者控制台(https://console.developers.google.com/project)上设置Google OpenId帐户。
2. 在开发者控制台的回调URL中设置为“blah/signin-google”。
3. 启用Google+ API。
4. 在Startup.Auth中添加ClientId和ClientSecret,并使用OAuth2明确要求用户的电子邮件地址。
5. 不需要修改Web.Config或创建特殊路由。
6. 不要试图将“/signin-google”指向不同的位置,也不要直接将其与“/account/externallogincallback”或“externalloginconfirmation”绑定,因为这些都是OWIN/Google过程中的不同步骤。
最后,确保启用了Google+ API,这是解决问题的关键。