在ASP中添加外部身份验证.净MVC

本文关键字:身份验证 MVC 外部 添加 ASP | 更新日期: 2023-09-27 17:51:18

我试图使用谷歌添加外部身份验证到MVC webapp

我从谷歌得到所有需要的信息,并保存我的appUser到DB后,我这样做:

var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
    return View("ExternalLoginFailure");
}
// Password is a required field, although not actually needed here
model.Password = Guid.NewGuid().ToString();
AppUser user = await _profileService.CreateUserProfile(model, UserManager, true);
if (user != null)
{
    var result = await UserManager.AddLoginAsync(user.Id, info.Login);
    if (result.Succeeded)
    {
        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
        return RedirectToLocal(returnUrl);
    }
    AddErrors(result);
}

和SignInManager。我得到一个异常

序列包含多于1个元素

堆栈跟踪信息不是很丰富:

--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.AspNet.Identity.TaskExtensions.CultureAwaiter`1.GetResult()
   at Microsoft.AspNet.Identity.Owin.SignInManager`2.<ExternalSignInAsync>d__1d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at AccountController.<ExternalLoginCallback>d__31.MoveNext() 

我有点困在这里,不知道如何获得更多的信息和在哪里看

在ASP中添加外部身份验证.净MVC

您是否手动编辑您的数据库?

这个异常通常表明你在DB上搜索的东西认为你只有1行返回,当你试图访问它时,你有2行(或更多),所以id不知道访问哪一行。

使用Identity,它确保这些场景不会一致,这就是为什么我问你是否手动对你的DB做了一些事情。

扫罗