gpt4 book ai didi

c# - OWIN 的 GetExternalLoginInfoAsync 总是返回 null

转载 作者:IT王子 更新时间:2023-10-29 03:42:41 25 4
gpt4 key购买 nike

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

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}

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

最佳答案

要让 OWIN Google 登录在标准 Visual Studio 2013、ASP.Net MVC5 站点上正常工作,我必须:

  1. https://console.developers.google.com/project 设置 Google OpenId 帐户

  2. 将那里的回调 URL 设置为 blah/signin-google
    关于您不需要做的事情的重要说明:

    • Google 无需使用 HTTPS 即可重定向回来;你甚至可以重定向回普通的 http://localhost ,没问题。

    • 您无需为重定向 URL 设置任何内容 - 无需路由、 Controller 操作或 Web.Config 中的特殊权限。重定向 URL 始终是/signin-google,OWIN 会在幕后为您处理。

例如,如果您的网站是 me.com,您可能在 Google Developer Console 中有这 3 个回调 URL:

http://localhost:53859/signin-google
http://test.me.com/signin-google
https://me.com/signin-google

第一个包括 VS 为您的项目提供的任何端口号。

  1. 启用 Google+ API。这是一个隐藏的陷阱,是此处问题的根本原因 - 如果您不这样做,很容易错过对 /account/ExternalLoginCallback 的请求包含 &error=access_denied ,那是因为谷歌说拒绝 OWIN 为用户的 Google+ 基本个人资料提出的权限请求。我分不清这是谁的错,是 Google 的还是 Microsoft 的。

要在 Developers Console 中启用 Google+ API,请单击左侧的 API,搜索 Google+,单击它并点击启用。是的,您确实需要这样做。 如果你不这样做,你就会被淘汰。

  1. 将 Google 在 Developers Console 中为您提供的 ClientId 和 ClientSecret 添加到 Startup.Auth,但改进过程中的代码以显式使用 OAuth2,并显式询问用户的电子邮件地址:

    var google = new GoogleOAuth2AuthenticationOptions()
    {
    ClientId = "123abc.apps.googleusercontent.com",
    ClientSecret = "456xyz",
    Provider = new GoogleOAuth2AuthenticationProvider()
    };
    google.Scope.Add("email");
    app.UseGoogleAuthentication(google);

就是这样。这终于让它发挥作用了。

只是想再重申一次,有很多关于此问题的答案以及 OWIN/Google 无法正常工作的类似问题,而且对于当前的 VS2013/MVC5/OWIN 模板,几乎所有答案都是错误的。
您根本不需要修改Web.Config。
你不需要创建任何特殊的路线。
你不应该尝试将 /signin-google 指向不同的地方,或者使用不同的回调 URL,你绝对不应该尝试将它直接绑定(bind)到 /account/externallogincallbackexternalloginconfirmation ,因为它们都与 /signin-google 和必要的步骤分开OWIN/Google 流程。

关于c# - OWIN 的 GetExternalLoginInfoAsync 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com