ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null
Posted
技术标签:
【中文标题】ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null【英文标题】:ASP.NET Web API Authentication.GetExternalLoginInfoAsync always return null 【发布时间】:2018-11-09 07:02:04 【问题描述】:我有 ASP.NET 5 项目,我正在使用 Web API 来建立外部登录(用于 Facebook 和 Google)。就我而言,我有包含以下代码的 Web API 控制器(不是 MVC 控制器):
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
if (error != null)
return Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error));
if (!User.Identity.IsAuthenticated)
return new ChallengeResult(provider, this);
var exLog = await Authentication.GetExternalLoginInfoAsync();
当移动应用程序调用此方法时,我得到了正确验证的请求并且属性User.Identity.IsAuthenticated
为真,我可以在调试器中看到用户是正确的,但问题是exlog
变量总是为空。
这里是Authentication
属性
private IAuthenticationManager Authentication => this.Request.GetOwinContext().Authentication;
我阅读了堆栈上有关此错误的所有问题,但没有任何帮助,大多数问题都是针对 MVC 控制器的,因此没有帮助。
例如,this question 没有帮助我,因为它用于 MVC。
更新 我正在使用 Owin 4.0
【问题讨论】:
我会将此作为评论添加到开头,因为它可能不相关。我过去有一个问题,Auth..
数据在返回请求中不可用,而只是重定向到 AuthBounce
操作(例如 return Redirect("~/AuthBounce");
then 尝试访问 var exLog = await Authentication.GetExternalLoginInfoAsync();
工作. 试一试。我很欣赏这可能与您的设置有所不同完全相同。
我应该把return Redirect("~/AuthBounce");
放在哪里?
删除当前的var exLog = await Authentication.GetExternalLoginInfoAsync();
并将其替换为重定向。在您的新 AuthBounce
操作中添加 var exLog = await Authentication.GetExternalLoginInfoAsync();
并查看它是否不再为空。就像我说的,这可能不相关/工作,但值得一试
@scgough 谢谢我试过了,但没用
重要的是在提出这个问题并开始赏金之后,我发现我根本不需要调用这个方法并且我的问题已经解决了,它完全与另一件事有关,那么这个问题,不便之处敬请见谅
【参考方案1】:
对于所有在 cmets 中要求我回答的人。 其实问题还没有解决,我也没有找到解决办法,很抱歉。
我发现我不需要从一开始就调用这个方法。 然后我完全走了另一条路(我不记得如何以及为什么)
只是一个小建议:再次考虑情况并重新考虑是否真的需要调用此方法。
我希望我能提供更多帮助,对不起。
【讨论】:
【参考方案2】:你得到“NULL”是因为你没有写代码如果 IsAuthenticated = true 那么它应该怎么做? (意味着重定向到任何页面或其他)。
仔细查看 IsAuthenticated 的 if 条件: if (!User.Identity.IsAuthenticated)
也许这对你有帮助。
【讨论】:
不,这与我的问题完全没有关系。顺便说一句,问题解决了,我不再使用这种方法了。【参考方案3】:尝试在 Google 控制台中启用 Google + API。在将密钥粘贴到代码后,还要确保密钥末尾没有与空格连接。
【讨论】:
以上是关于ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net Web API 2第三课——.NET客户端调用Web API
Asp.Net Web API 2第六课——Web API路由和动作选择
Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化