gpt4 book ai didi

asp.net-mvc - MVC 5 Owin Facebook Auth 导致空引用异常

转载 作者:行者123 更新时间:2023-11-30 05:14:19 26 4
gpt4 key购买 nike

我正在尝试在 Visual Studio 2013 的新 MVC 5 项目中设置集成的 OWIN Facebook 身份验证。我已经按照本教程配置了应用程序和 key :

http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

但是,我从 AccountController 中的这个调用中抛出了一个 NullReferenceException:

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

我已经检查了 Fiddler 中的响应,并从 Facebook 得到了似乎是成功的响应,但仍然出现此错误。响应如下所示:

{"id":"xxx","name":"xxx","first_name":"xxx","last_name":"xxx","link":
"https:\/\/www.facebook.com\/profile.php?id=xxx","location":{"id":"xxx","name":"xxx"},
"gender":"xxx","timezone":1,"locale":"en_GB","verified":true,"updated_time":"2013-10-23T10:42:23+0000"}

我在 http 和 https 中调试时得到这个。我猜这是一个框架错误,但到目前为止通过反射器对此进行诊断时一片空白。

最佳答案

这可能是身份 OWIN 扩展代码中的错误。我无法重现这个问题,因为我的 facebook 有效负载总是返回 json 中的用户名字段,而您的 fb 响应中缺少该字段。我不太确定为什么它不在那里。

identity owin 扩展方法中的代码没有对与用户名字段相同的身份名称声明进行空检查。我们已经在内部为它提交了一个错误。

为了解决这个问题,您能否尝试用以下代码替换您的 ExternalLoginCallback 方法:

   [AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var result = await AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie);
if (result == null || result.Identity == null)
{
return RedirectToAction("Login");
}

var idClaim = result.Identity.FindFirst(ClaimTypes.NameIdentifier);
if (idClaim == null)
{
return RedirectToAction("Login");
}

var login = new UserLoginInfo(idClaim.Issuer, idClaim.Value);
var name = result.Identity.Name == null ? "" : result.Identity.Name.Replace(" ", "");

// Sign in the user with this external login provider if the user already has a login
var user = await UserManager.FindAsync(login);
if (user != null)
{
await SignInAsync(user, isPersistent: false);
return RedirectToLocal(returnUrl);
}
else
{
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { UserName = name });
}
}

当没有从 facebook/google 返回的用户名时,代码会将默认用户名设置为空。

关于asp.net-mvc - MVC 5 Owin Facebook Auth 导致空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564479/

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