2015-08-29 29 views
2

我想跳過外部登錄註冊 - 關聯形式 enter image description here
我使用谷歌與MVC5, 外部登錄如果你用谷歌帳號登錄,它會告訴你上面的畫面第一次輸入Google憑證後。我只想跳過這個屏幕。
MVC外部登錄 - 如何跳過協會形式

以上內容來自

 [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 }); 
      } 
     } 



返回查看視圖獲取返回( 「ExternalLoginConfirmation」,新 ExternalLoginConfirmationViewModel {電子郵件= loginInfo.Email});

以上代碼返回ExternalLoginConfirmation視圖和示出了上面的屏幕。在提交上述表單將提交到以下行動

公共異步任務 ExternalLoginConfirmation(ExternalLoginConfirmationViewModel模型, 串RETURNURL)

要跳過上面登記畫面,我需要調用ExternalLoginConfirmationExternalLoginCallback,那我該怎麼做。

+0

你摸不着頭腦?目前正在搜索相同的答案。如果我找到答案會更新。 – eselk

回答

5

好吧,沒有太長的時間把它放在一起。我沒有測試過它,但如果它不能正常工作,應該非常接近。我大多隻是複製從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 }); 
     } 
+0

自2015年的答案以來,代碼已經發生了很大變化,但概念是相同的。您需要將'ExternalLoginConfirmation'方法中的代碼拉到'ExternalLoginCallback' –