首页 文章

ASP身份使用externallogin的新用户

提问于
浏览
0

我正在重构一个旧网站以使用OWIN,并使用ASP Identity 2声明表单和外部loigins .

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

我正在使用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方法流经以下mannor中的userstore和usermanager以及signinmanager . 在哪里以及如何缩短逻辑以使结果失败的最佳方法?

AccountController:ExternalLogin(Provider,returnURL)

我的Owin中间件

AccountController:ExternalLoginCallBack AuthenticationManager返回包含所有详细信息的loginInfo

UserManager:任务FindAsync(UserLoginInfo)调用UserStore:任务FindAsync(UserLoginInfo)UserLoginInfo有Provider和Key,这是我发现系统中没有用户的地方 . 无论我返回什么任务,它都不会停止流动 .

... UserStore:锁定和其他misc东西 - 即使空的也需要User对象...

SignInManager:任务SignInAsyn(User,Persistent,Remeber) - 用户对象为空

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

用户:任务GenerateUserIdentityAsync(UserManager manager)

UserManager:CreateIdentityAsync(User,Auth type)用户为空且auth type =“external cookie”这会抛出NULL异常 .


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

return Task.FromResult<MyUser>(null);

1 回答

  • 0

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

    return Task.FromResult<MyUser>(null);
    

相关问题