简体   繁体   中英

ASP.NET Identity editing logged in user's data?

I have modified the Views/Manage/Index.cshtml to display the User's email as well. I've modified the IndexViewModel as well so it recognizes the "Email" string and then made another .cshtml page similar to the changing of phone number one which is there by default. The new page is called ChangeEmail.cshtml

@using (Html.BeginForm("ChangeEmail", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Add an email</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Email, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.Email, new { @class = "form-control" })

        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Submit" />
        </div>
    </div>
}

From what I've seen, the changing of password happens through a task called "ChangePasswordAsync" inside UserManager.cs Is there a way to change the Email without making a new task?

EDIT: added more from the controller(index) :

    public async Task<ActionResult> Index(ManageMessageId? message)
            {
                ViewBag.StatusMessage =
                    message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
                    : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
                    : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set."
                    : message == ManageMessageId.Error ? "An error has occurred."
                    : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added."
                    : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed."
                    : message == ManageMessageId.EmailChangedSuccess ? "Your email has been changed"
                    : "";

                var userId = User.Identity.GetUserId();
                var userEmail = User.Identity.Name;
                var user = UserManager.FindById(userId);



                var model = new IndexViewModel
                {
                    HasPassword = HasPassword(),
                    PhoneNumber = await UserManager.GetPhoneNumberAsync(userId),
                    TwoFactor = await UserManager.GetTwoFactorEnabledAsync(userId),
                    Logins = await UserManager.GetLoginsAsync(userId),
                    BrowserRemembered = await AuthenticationManager.TwoFactorBrowserRememberedAsync(userId),
                    Email = user.Email,
                    City = user.City,
                    Region = user.Region


                };
                user.Email = "topkek@ucn.dk";
                UserManager.UpdateAsync(user);

                return View(model);
            }

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ChangeEmail(ChangeEmailViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }



            return RedirectToAction("Index", new { Message = ManageMessageId.EmailChangedSuccess });
        }

Get the user's Email address from your ChangeEmailViewModel and then update the user's details using the userManager.UpdateAsync(user)

EDIT

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ChangeEmail(ChangeEmailViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
             //Get the user's Id
            var userId = User.Identity.GetUserId(); 

            //get the user (you can modify the variables to fit yours) 
           var user = UserManager.FindByIdAsync(userId);

          //this is how to change the Email
          user.Result.Email= model.Email// **EDIT**;

         userManager.UpdateAync(user.Result);

            return RedirectToAction("Index", new { Message = ManageMessageId.EmailChangedSuccess });
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM