![](/img/trans.png)
[英]How to register login using submit button in token based authentication web api using Asp.net MVC 5?
[英]How to register user phone number also in Token based authentication in ASP.Net MVC?
我想在用户注册表格时保存用户电话号码 。
我的注册表目前仅使用以下代码的3个字段(电子邮件ID,密码,确认密码)有效
//SignUp
$('#btnSignUp').click(function () {
console.log('Signup clicked');
var data = {
"Email": $('#txtSingUpEmail').val(),
"PhoneNumber": '546789651', //for testing I directly pass the value in JQuery
"Password": $('#txtSignUpPassword').val(),
"ConfirmPassword": $('#txtConfirmPassword').val()
};
$.ajax({
type: 'POST',
url: '/ProjectName/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data)
}).done(function (data) {
console.log('Registered Succesfully');
$('#modalSignup').modal('hide');
$('#exampleModalPreview').modal('show');
}).fail(function (showError) {
console.log('Signup failed');
console.log('full error = '+JSON.stringify(showError));
//$('#loginErrorMsg').text(JSON.parse(showError.responseText).error_description);
});
});
的AccountController
// POST api/Account/Register
[AllowAnonymous]
[System.Web.Mvc.ValidateAntiForgeryToken]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//I add PhoneNumber parameter here
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email, PhoneNumber = model.PhoneNumber };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
我尝试通过在下面的类中添加PhoneNumber
变量,但从未将其与电话号码一起保存
RegisterBindingModel类
public class RegisterBindingModel
{
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
//[Required]
[Display(Name = "PhoneNumber")]
public string PhoneNumber { get; set; }
}
UPDATE
我发现以下关于metadata
方法
的UserManager
[AsyncStateMachine(typeof(UserManager<,>.<SetPhoneNumberAsync>d__d9))]
[DebuggerStepThrough]
public virtual Task<IdentityResult> SetPhoneNumberAsync(TKey userId, string phoneNumber);
所以当我在下面的代码的Register
方法上执行此方法时。 输入在其中创建用户的电话号码
// POST api/Account/Register
[AllowAnonymous]
[System.Web.Mvc.ValidateAntiForgeryToken]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//I add PhoneNumber parameter here
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email, PhoneNumber = model.PhoneNumber };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
IdentityResult setPhoneNumber = await UserManager.SetPhoneNumberAsync("", model.PhoneNumber);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
以及它引发找不到密钥的错误。 我只是从表中获取一个userId(已注册的userID的值)键。 我将其传递给如下所示的参数,然后将其设置为两个用户的电话号码(既已注册的用户,也已重新注册)
我找到了答案
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email, PhoneNumber = model.PhoneNumber };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
IdentityResult setPhoneNumber = await UserManager.SetPhoneNumberAsync(user.Id, model.PhoneNumber);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.