asp.net mvc Azure上的OAuth外部登录失败(localhost ok)

时间:2016-04-10 19:45:43

标签: c# asp.net asp.net-mvc azure oauth-2.0

在部署到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);
    }

有人可以推荐基本的调试步骤吗?有没有办法查看错误日志? (道歉,因为我对此很陌生 - 指导赞赏)。

1 个答案:

答案 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;。