使用facebook登录MVC5 Null参考

时间:2013-11-24 20:27:52

标签: c# asp.net asp.net-mvc facebook

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


这是节食方法:

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

我不知道如何调试这个。一个断点和浸泡虽然代码没有帮助...我最终看到我的Error.cshtml页面。此时的错误是一个简单的对象引用null异常,内部异常也是null。


修改

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

修改2

看看小提琴手,Facebook正在回归200,其外观与json一样正确。

编辑3

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

6 个答案:

答案 0 :(得分:34)

现在快速解决方案。

您必须在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 }));
}

答案 1 :(得分:6)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

我的类似问题是谷歌,我还没有解决过FB问题。它在本地工作得很好,但是当我发布到服务器时就废弃了。

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

我还申请了:Best way in asp.net to force https for an entire site?

我还添加了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,但这是该机器上唯一的站点,因此我不必担心会删除其他站点。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

对象引用未设置为对象的实例。

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

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

来源错误:

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

嗨,以前我有同样的错误。我通过

解决

工具 - &gt;库包管理器 - &gt;管理解决方案的Nuget包 - &gt; Microsoft.owin.security.Facebook

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