asp.net-mvc – MVC 5 Owin Facebook Auth导致空参考异常
|
我试图在Visual Studio 2013中的一个新的MVC 5项目中设置集成的OWIN Facebook身份验证。我已经按照本教程配置了应用和密钥: 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响应中丢失。我不太清楚为什么不在那里身份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 /谷歌返回时,代码将默认用户名设置为空。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – T4MVC @ Url.Action(MVC.Controller.Action
- 如何解决.Net中冲突的程序集?
- asp.net – HttpContext.Current不解析在MVC 4项目
- asp.net – 连接字符串最佳实践
- asp.net-mvc – 如何将KendoUI DropDownListFor绑定到ViewD
- asp.net – jqGrid:使用多种方法来过滤数据
- asp.net – 经典ASP出站TLS 1.2
- ASP.NET Web部件:非IE浏览器中的拖放支持
- ASP.NET MVC 4 / Web API – 为Accepts插入Razor渲染器:te
- asp.net-mvc – asp.net mvc数据库交互验证
- asp.net-mvc-3 – MVC3 – 类型double与前导零的
- 单个ASP.net网站与多个实例和web.configs
- asp.net-mvc – 在哪里?Json.Encode或@Json.Dec
- entity-framework – 将DbContext注入Repository
- asp.net-mvc – 为服务层设计DI(构造函数注入)的
- asp.net-mvc-3 – MVC3和认证
- asp.net – 带标题的Response.Redirect
- asp.net – 当使用HttpContextScoped()时,Struct
- asp.net – 对于每个循环都有控件并在MVC 4中提交
- asp.net-mvc – 应用程序每15分钟编译一次
