ASP.Net MVC - 两步认证

时间:2015-05-06 07:41:25

标签: c# asp.net asp.net-mvc asp.net-identity two-factor-authentication

早上好

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

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

有谁知道保存此生成令牌的位置。在基本的MVC示例中,他们使用它来添加电话号码,并且需要使用提供给手机号码的令牌进行验证,此代码用于生成该令牌。但是没有保存该令牌的位置,数据库中没有列,并且没有传递给隐藏字段中的视图。但奇怪的是,当你输入代码并提交它时,它将在post方法中使用以下方法进行比较

    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方法将在何处找到生成的令牌以与传入模型的令牌进行比较。你们中的任何人都知道在哪里可以找到它。

亲切的问候

1 个答案:

答案 0 :(得分:1)

代码未存储在数据库中。代码生成和验证由ASP.NET Identity内部处理。 &#34; ManageController&#34;中有相应的操作方法。处理电话号码和代码验证。这是代码

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

干杯。