C# MVC外部登录-如何跳过关联表单
我想跳过外部登录注册-关联表单C# MVC外部登录-如何跳过关联表单,c#,asp.net-mvc-5,asp.net-identity,C#,Asp.net Mvc 5,Asp.net Identity,我想跳过外部登录注册-关联表单 我使用谷歌外部登录和MVC5, 如果您使用google帐户登录,在第一次输入google凭据后,它会在屏幕上方显示您。我只想跳过这个屏幕 上面的视图从 [AllowAnonymous] public async Task<ActionResult> ExternalLoginCallback(string returnUrl) { var loginInfo = await Au
我使用谷歌外部登录和MVC5, 如果您使用google帐户登录,在第一次输入google凭据后,它会在屏幕上方显示您。我只想跳过这个屏幕
上面的视图从
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Sign in the user with this external login provider if the user already has a login
var user = await UserManager.FindAsync(loginInfo.Login);
if (user != null)
{
await SignInAsync(user, isPersistent: false);
return RedirectToLocal(returnUrl);
}
else
{
// 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 });
}
}
[AllowAnonymous]
公共异步任务ExternalLoginCallback(字符串返回URL)
{
var loginInfo=await AuthenticationManager.GetExternalLoginInfoAsync();
if(loginInfo==null)
{
返回重定向操作(“登录”);
}
//如果用户已经登录,请使用此外部登录提供程序登录该用户
var user=await UserManager.FindAsync(loginInfo.Login);
如果(用户!=null)
{
等待信号同步(用户,ispersist:false);
返回重定向到本地(returnUrl);
}
其他的
{
//如果用户没有帐户,则提示用户创建帐户
ViewBag.ReturnUrl=返回URL;
ViewBag.LoginProvider=loginInfo.Login.LoginProvider;
返回视图(“ExternalLoginConfirmation”,新的ExternalLoginConfirmationViewModel{Email=loginInfo.Email});
}
}
返回视图(“外部登录确认”,新建 外部登录确认视图模型{Email=loginInfo.Email}) 上面的代码返回ExternalLoginConfirmation视图并显示在屏幕上方。在提交上述表格时,它将提交给以下行动 公共异步任务 ExternalLoginConfirmation(ExternalLoginConfirmationViewModel模型, 字符串返回URL)
要跳过上面的注册屏幕,我需要从ExternalLoginCallback调用externalloginconconfirmation,那么我该怎么做呢。好吧,我没花太长时间就把它放在一起了。我还没有测试过,但如果它不能正常工作,应该非常接近。我主要是将代码从ExternalLoginConfirmation复制到ExternalLoginCallback:
// Sign in the user with this external login provider if the user already has a login
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:
// Added this section to automatically create account if we have an email address
if (!string.IsNullOrEmpty(loginInfo.Email))
{
var user = new ApplicationUser { UserName = loginInfo.Email, Email = loginInfo.Email };
var createUserResult = await UserManager.CreateAsync(user);
if (createUserResult.Succeeded)
{
var addLoginResult = await UserManager.AddLoginAsync(user.Id, loginInfo.Login);
if(addLoginResult.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
}
// 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 });
}
你弄明白了吗?当前正在搜索相同的答案。如果我找到答案,将进行更新。代码自2015年您的答案以来发生了很大变化,但概念是相同的。您需要将代码从
externalloginconconfirmation
方法提取到ExternalLoginCallback