Как зарегистрировать телефонный номер пользователя также в аутентификации на основе токенов в ASP.Net MVC? - PullRequest
0 голосов
/ 12 марта 2019

Я хочу сохранить пользователя номер телефона , когда пользователь регистрирует форму.

Моя форма регистрации работает сейчас только с 3 полями (EmailID, пароль, подтверждение пароля), используя следующий код

//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 class

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) из таблицы. Я передаю его по параметру, как показано ниже, затем он устанавливает номер телефона для обоих пользователей (уже зарегистрированный пользователь, а также вновь зарегистрированный)

1 Ответ

1 голос
/ 13 марта 2019

Я нашел ответ

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...