ASP Identity 使用外部登录的新用户

问题描述 投票:0回答:1

我正在重构一个旧网站,以使用 OWIN 和带有表单的声明以及使用 ASP Identity 2 的外部登录。

我对使用外部登录创建新用户的正确方法有疑问。

我正在使用 MVC 脚手架代码,但有一个自定义 UserStore、UserManager 和 Signinmanager,一切都正常工作。

ExternalLoginCallback方法中的帐户控件有一个带有注释的情况,当找不到用户时重定向到ExternalLoginConformation,但我不确定在哪里短路登录逻辑,这样它就不会抛出异常。

 var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
            switch (result)
            {
                case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
                case SignInStatus.Failure:
                default:
                    // If the user does not have an account, then prompt the user to create an account
                    ViewBag.ReturnUrl = returnUrl;
                    ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
                    return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });
            }

SignInManager.ExternalSignInAsync 方法按以下方式流经用户存储、用户管理器和登录管理器。在哪里以及如何缩短逻辑以获得失败结果的最佳方法?

AccountController:ExternalLogin(提供商,returnURL)

我的 Owin 中间件

AccountController:外部登录回调 AuthenticationManager 返回包含所有详细信息的登录信息

UserManager:任务FindAsync(UserLoginInfo) 调用 UserStore :任务 FindAsync(UserLoginInfo) UserLoginInfo 有提供者和密钥,这是我发现系统中没有用户的地方。无论我返回什么任务,它都不会停止流程。

... UserStore :锁定和其他杂项 - 即使为空也需要一个 User 对象 ...

SignInManager:任务 SignInAsyn(用户,持久,记住)- 用户对象为空

SignInManager:任务 CreateUserIdentityAsync(User)- 用户对象为空

用户:任务GenerateUserIdentityAsync(UserManager管理器)

UserManager :CreateIdentityAsync(User, Auth type) user 为空且 auth type = "external cookie" 这会引发 NULL 异常。


找到解决方案。我可以从 UserManager FindAsync 方法返回空任务,这将导致失败结果。

 return Task.FromResult<MyUser>(null);
asp.net-mvc asp.net-identity owin asp.net-identity-2
1个回答
0
投票

找到解决方案。我可以从 UserManager FindAsync 方法返回空任务,这将导致失败结果。

 return Task.FromResult<MyUser>(null);
© www.soinside.com 2019 - 2024. All rights reserved.