проблемы после вызова функции UserManager.Create - PullRequest
0 голосов
/ 16 июня 2019

У меня возникли проблемы после вызова метода UserManager.Create. Дело в том, что текущий зарегистрированный пользователь потерял свои учетные данные после создания нового пользователя. Я поставлю свой код здесь

public async Task<ActionResult> CrearUser(CreateUserModel model)
     {
       if (ModelState.IsValid)
         {
                var user = new ApplicationUser
                {
                    FirstName = model.FirstName,
                    LastName = model.LastName,
                    UserName = model.UserName,
                    Email = model.Email,
                    PhoneNumber = model.PhoneNumber,
                    ActiveSince = Convert.ToDateTime(model.ActiveSince),
                    ActiveUntil = Convert.ToDateTime(model.ActiveUntil)
                };
                var result =  UserManager.Create(user, model.Password);
                if (result.Succeeded)
                {


                    // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    string code = HttpUtility.UrlEncode(await UserManager.GenerateEmailConfirmationTokenAsync(user.Id));
                    var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");


                    var roleStore = new RoleStore<IdentityRole>();
                    var roleMngr = new RoleManager<IdentityRole>(roleStore);
                    string name = roleMngr.FindById(model.rolid).Name;
                    await this.UserManager.AddToRoleAsync(user.Id, name);

                    Success(string.Format(" Usuario <b>{0}</b> Creado con Exito.", model.UserName), true);
                    return RedirectToAction("Index");
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            model.Roles = GetRoles();
            return View(model);
        }

удаление кода для отправки письма с подтверждением У меня нет проблем. Кто-нибудь знает, что там может влиять?

string code = HttpUtility.UrlEncode(await UserManager.GenerateEmailConfirmationTokenAsync(user.Id));
                var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я получил сообщение об ошибке в функции отправки электронного письма, и похоже, что эта ошибка повлияла на сеанс, и пользователь был перенаправлен на страницу входа.И это происходило в режиме разработки, потому что проблема с электронной почтой была только в производственной среде.Спасибо болкай за помощь.

0 голосов
/ 16 июня 2019

Кажется, проблема в том, что вы пытаетесь сыграть с объектом user.Вместо этого вы должны получить ссылку true на созданного пользователя.

После проверки успешного создания пользователя вы можете сделать следующее:

if(result.succeeded)
{
  var theNewUser = await UserManager.FindByEmailAsync(model.Email);
//Do other things with the new user.
}
...