Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetExternalLoginInfoAsync null,OWIN在ExternalLoginCallback中,除非已经登录到google_C#_Asp.net_Asp.net Mvc_Login_Owin - Fatal编程技术网

C# GetExternalLoginInfoAsync null,OWIN在ExternalLoginCallback中,除非已经登录到google

C# GetExternalLoginInfoAsync null,OWIN在ExternalLoginCallback中,除非已经登录到google,c#,asp.net,asp.net-mvc,login,owin,C#,Asp.net,Asp.net Mvc,Login,Owin,我一直在尝试使用google帐户在MVC5应用程序中使用OWIN实现外部登录 如果我已经登录谷歌,点击我应用程序中的谷歌按钮就可以了,在允许我访问登录信息后,它会将我带到我的注册页面 如果当我点击我的应用程序google按钮时我还没有登录到google,我会被提示按预期使用google登录,但是回拨接收器似乎没有看到我已经登录,因为在这种情况下,logininfo在回调中始终为空,如下所示 [AllowAnonymous] public async Task<ActionR

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

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

如果当我点击我的应用程序google按钮时我还没有登录到google,我会被提示按预期使用google登录,但是回拨接收器似乎没有看到我已经登录,因为在这种情况下,logininfo在回调中始终为空,如下所示

    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

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

        // Code omitted for brevity.
        }
    }
[AllowAnonymous]
公共异步任务ExternalLoginCallback(字符串返回URL)
{
var loginInfo=await AuthenticationManager.GetExternalLoginInfoAsync();
if(loginInfo==null)
{
返回重定向操作(“登录”);
}
//为简洁起见,省略了代码。
}
}

有人有解决办法或解释吗?这几乎就像外部cookie在登录谷歌后收到请求后才提供给OWIN一样。

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

我在配置文件中添加了以下内容

<location path="signin-google">
 <system.web>
   <authorization>
     <allow users="*" />
   </authorization>
 </system.web>
</location>


它现在可以工作了…

如果你已经登录到谷歌,你可以完全避免外部登录回调,只需重定向到应用程序。回调是调用身份验证API的重定向;OWIN在这里的答案试图配置的内容之外为您处理此URL。请参阅我关于以下问题的答案:这很可能是由于启用了窗口身份验证,而对于使用google auth的MVC应用程序,不应该启用窗口身份验证