OWIN的GetExternalLoginInfoAsync总是返回null。

7 浏览
0 Comments

OWIN的GetExternalLoginInfoAsync总是返回null。

我创建了一个新的MVC5 Web应用程序,当我尝试使用Google或Facebook登录时,AccountController中的ExternalLoginCallback操作被调用,但GetExternalLoginInfoAsync()总是返回null:

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

if (loginInfo == null)

{

return RedirectToAction("Login");

}

因为它始终为null,所以它只是重定向回登录页面并重新开始过程。我该如何修复这个问题?

0
0 Comments

原因:

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上被多个用户确认有效,并且已经有多个用户表示感谢。

0
0 Comments

问题的原因是没有启用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,这是解决问题的关键。

0
0 Comments

问题的原因是需要在Google控制台中启用Google+ API,并确保将秘钥粘贴到代码中时末尾没有空格。解决方法是按照asp.net的说明文档中的步骤进行操作。

0