【问题标题】:ASP.Net MVC - Two Step AuthenticationASP.Net MVC - 两步验证
【发布时间】:2015-07-16 05:16:14
【问题描述】:

早安

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

亲切的问候

【问题讨论】:

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


    【解决方案1】:

    代码未存储在数据库中。代码生成和验证由 ASP.NET Identity 在内部处理。在“ManageController”中有对应的action方法处理电话号码和验证码。这是代码

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

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多