【发布时间】:2016-02-17 15:08:53
【问题描述】:
我们在 MVC 应用程序中使用 ASP.net 身份。每当用户更改电话号码或密码时,我们将通过电子邮件或SMS 向用户发送安全代码。我们将对用户验证安全码,如果有效,我们将允许用户更改电话号码或密码。
我们正在使用ASP.net身份提供的GenerateChangePhoneNumberToken方法生成安全码。
var securityCode = UserManager.GenerateChangePhoneNumberToken(
user.Id, model.MobileNumber);
HTML
<div class="text-center top-space" id="validate_code_email">
<button id="send_via_email" class="submit-btn login-btn-align material_button" data-role="button" onclick="sendCodeViaEmail()">Send a New Code Via Email</button>
</div>
jQuery
function sendCodeViaText() {
var model = { 'UserId': userIdentityId };
$.ajax({
url: "/api/accountwebapi/SendVerificationEmail",
type: "POST",
data: model,
dataType: "json",
success: function (data) {
},
error: function (e) {
}
});
发送安全码的API控制器方法
public IHttpActionResult SendVerificationEmail([FromBody] VerifyPhoneNumberViewModel model)
{
try
{
if (model != null)
{
var user = UserManager.Users.Where(a => a.Id == model.UserId).FirstOrDefault();
if (user != null)
{
var code = UserManager.GenerateChangePhoneNumberToken(
user.Id, user.PhoneNumber);
UserManager.SendEmail(user.Id,
"Confirm your account",
"Your security code is: " + code);
return Ok(new { success = true, PhoneNumber = user.PhoneNumber, UserId = user.Id, message = C.RESENDVERIFICATIONCODEEMAILSUCCESS });
}
}
else
{
return Ok(new { success = true, message = C.RESENDVERIFICATIONCODEEMAILSUCCESS });
}
return Ok(new { success = false, message = C.TRYAGAIN });
}
catch (Exception e)
{
LogError(e.Message, e);
throw;
}
}
我们在生成和验证安全代码方面没有问题。我们面临的唯一问题是GenerateChangePhoneNumberToken 方法生成重复代码。
Click one - Security Code : 123456 User ID : 1
Click two - Security Code : 123456 User ID : 1
一分钟后它会生成不同的代码
Click three Security Code : 123457 User ID : 1
因此,如果用户连续单击它会生成重复的安全代码。如何预防这个问题?请帮忙...
【问题讨论】:
-
你有 Click 事件处理程序的代码吗?
-
是的,点击按钮后,我们将生成安全代码,并将其发送给经过身份验证的用户到他的电子邮件或电话
-
我的意思是,您能否在问题中至少显示其中的某些部分,尤其是安全代码是如何递增的。至于安全性是如何产生的,你可以选择不显示,但如果不是太敏感,如果也能在问题中显示就好了。这样,问题可能更容易被发现。
-
GenerateChangePhoneNumberToken 中提到的方法是 asp.net identity 提供的一种内置方法,我也不知道它是如何生成安全代码的......
-
不,不。我的意思是
Click方法……你有吗?
标签: c# asp.net-mvc asp.net-identity