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