使用facebook登录MVC5 Null参考

当我使用开箱即用的ASP.NET mvc5帐户控制器登录facebook时,我有时会得到一个空引用exception。


这是节食方法:

public async Task ExternalLoginCallback(string returnUrl) { // Crashes on this line var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); if (loginInfo == null) { return RedirectToAction("Login"); } } 

我不知道如何调试这个。 一个断点并且通过代码进行浸泡没有帮助……我最终看到了我的Error.cshtml页面。 此时的错误是一个简单的对象引用nullexception,内部exception也是null。


编辑

我通过Nuget更新到最新的Owins,没有变化。

编辑2

看看小提琴手,Facebook正在回归200,看起来像json一样正确。

编辑3

这么奇怪。 我正在测试3个Facebook帐户。 两个帐户工作正常,1个没有。 失败者将返回200.我已经删除了Facebook中的应用程序引用..我得到一个应用程序确认窗口,我点击确定,它死了……太奇怪了。

现在快速解决方案。

您必须在ExternalLoginCallback之前清除会话。 例。

 [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult ExternalLogin(string provider, string returnUrl) { ControllerContext.HttpContext.Session.RemoveAll(); // Request a redirect to the external login provider return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); } 

将我的Owin组件从版本3.0.1升级到版本3.1.0修复了此问题(到目前为止)。 3.1.0于2017年4月10日发布。

根据Lee的回复清除会话(标记为答案)也为我们解决了这个问题。 我们有一个非常标准的ASP.NET MVC 4网络应用程序,谷歌和Facebook登录也可以在Azure网站上运行,这让我们感到疯狂。

它会在每个12到24小时或在该时间段内的某个地方停止工作,重新启动网站将使其在下一个时期工作,直到它再次发生。

然而,我确实想知道为什么清除会话有效…它有点像框架错误(或者在我们的情况下可能是Azure错误),除非我遗漏了什么。

我的类似问题是谷歌,我尚未解决FB问题。 它在本地运行良好,但在我发布到服务器时已经废弃了。

除了李提到的添加内容:ControllerContext.HttpContext.Session.RemoveAll();

我还申请了: 在asp.net中强制https整个网站的最佳方式?

我还添加到Startup.Auth.cs文件中:

 var gProvider = new GoogleAuthenticationProvider { OnAuthenticated = context => Task.FromResult(0) }; var gOptions = new GoogleAuthenticationOptions { Provider = gProvider, SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, AuthenticationMode = AuthenticationMode.Active }; app.UseGoogleAuthentication(gOptions); 

在我部署代码之后,我还重新启动了IIS,应用程序池和网站。 当我意识到在部署不理想之后重新启动IIS时,这是该机器上唯一的站点,所以我不必担心取消其他站点。

我有一个没有用户名设置的Facebook帐户,该帐户在该行代码上给我一个空的exception消息。 这里的问题似乎是在将信息返回给您的应用程序时,帐户中会出现一些属性,如果这些属性不存在,则会发生爆炸。 在我的情况下,在Facebook中设置用户名修复了问题。

你调用的对象是空的。

描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

来源错误:

第232行:public async Task ExternalLoginCallback(string returnUrl)第233行:{第234行:var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 第235行:if(loginInfo == null)第236行:{

嗨,以前我有同样的错误。我解决它

工具 – >库包管理器 – >管理解决方案的Nuget包 – > Microsoft.owin.security.Facebook

只需添加该依据即可立即获得错误