我正在重构一个旧网站以使用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 回答
找到解决方案我可以从UserManager FindAsync方法返回一个空任务,它将导致失败结果 .