在部署到Azure后,我遇到外部登录提供商的困难,我已经能够与外部提供商(谷歌和Facebook)进行身份验证,但在用户点击注册时收到错误。
我正在关注使用'membership API'并添加'canEdit'角色的本教程。
使用Membership API https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/
它在localhost上工作正常但是当我部署到Azure时,它成功通过Google或FB进行身份验证并获取ExternalLoginConfirmation.cshtml并允许用户按下注册,然后显示错误说明
'处理您的请求时出错。'
我可以连接到数据库上的Azure ASPNetUsers表,我可以创建用户,用户实际上可以单击登录并进入该站点。但是,用户尚未添加到“canEdit”角色,因此在确认期间似乎部分完成或失败。我不明白为什么这适用于localhost而不是Azure,我也为Azure构建了一个新的部署。错误可能出现在ExternalLoginConfirmation的Accountcontroller方法中吗?将用户添加到'canEdit'角色但不是在localhost上,只在Azure上发生错误。
// POST: /Account/ExternalLoginConfirmation
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Manage");
}
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure");
}
var user = new ApplicationUser {
UserName = model.DisplayName,
Email = model.Email,
OAuthName = model.OAuthName,
DisplayName = model.DisplayName,
ForceID = model.ForceID,
NeighID = model.NeighID,
MyLatLng = model.MyLatLng
};
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
await UserManager.AddToRoleAsync(user.Id, "canEdit");
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
AddErrors(result);
}
ViewBag.ReturnUrl = returnUrl;
return View(model);
}
有人可以推荐基本的调试步骤吗?有没有办法查看错误日志? (道歉,因为我对此很陌生 - 指导赞赏)。
答案 0 :(得分:0)
在检查Azure数据库后,我发现新角色并未存在于AspNetRoles中。表,因此它将用户添加到了AspNetUsers&#39;表但在尝试分配角色时给出错误。
对于可能有类似问题的人,需要检查的3个表格;
AspNetRoles - check all 'roles' are present
AspNetUsers - check all 'users' are present
AspNetUserRoles - check user and associated roles
我的错误在于我发布应用程序的方式,在“发布Web向导”的设置选项卡上。我没有选择执行代码优先迁移&#39;。