0

早上好ASP.Net MVC - 兩步驗證

在MVC中,在管理控制器中使用了一種方法。生成一個令牌。

var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), model.Number); 

有沒有人知道這個生成的令牌在哪裏保存。在基本的MVC例子中,他們用它來添加一個電話號碼,並且需要用提供給手機號碼的sms`d進行驗證,該代碼用於生成該令牌。但是,沒有保存該令牌的位置,數據庫中沒有列並且沒有被傳遞到隱藏字段中的視圖。但奇怪的部分是,當你輸入代碼並提交,它會使用以下

public async Task<ActionResult> VerifyPhoneNumber(string phoneNumber) 
    { 
     var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), phoneNumber); 
     // Send an SMS through the SMS provider to verify the phone number 
     return phoneNumber == null ? View("Error") : View(new VerifyPhoneNumberViewModel { PhoneNumber = phoneNumber }); 
    } 

我無法揣摩出GenerateChangePhoneNumberTokenAsync方法就可以找到生成的令牌與比較做POST方法的比較令牌被傳入模型。你們中的任何一個人都知道在哪裏可以找到。

親切的問候

回答

1

該代碼未存儲在數據庫中。代碼生成和驗證由ASP.NET Identity在內部處理。 「管理控制器」中有相應的操作方法,用於處理電話號碼和代碼驗證。以下是代碼

public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 
     var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code); 
     if (result.Succeeded) 
     { 
      var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 
      if (user != null) 
      { 
       await SignInAsync(user, isPersistent: false); 
      } 
      return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess }); 
     } 
     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "Failed to verify phone"); 
     return View(model); 
    } 

注意使用UserId,PhoneNumber和Code進行驗證的行。

var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code); 

乾杯。