Как получить идентификатор пользователя, когда он в данный момент вошел в систему? - PullRequest
1 голос
/ 08 мая 2019

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

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

Модель

EditUser:

    public class EditUser
    {
        public InputModel Input { get; set; }
        public class InputModel
        {
            [Required(ErrorMessage = "E-mail is request")]
            [Display(Name = "E-mail")]
            [EmailAddress]
            public string Email { get; set; }

            [Required(ErrorMessage = "Input password, is cannot null")]
            [Display(Name = "Hasło")]
            [DataType(DataType.Password)]
            public string Password { get; set; }
        }
    }

View

Группа:

...
                <li><a asp-action="Edit" asp-controller="ManageUser" class="edit">Edit Account</a></li>

Кому => Редактировать:

@using Microsoft.AspNetCore.Http
@inject UserManager<UserApp> UserLog
@model IndexModelView
@inject IHttpContextAccessor HttpContextAccessor
@{
    Layout = "~/Views/Shared/_LayoutPanel.cshtml";
}

@if (User.Identity.IsAuthenticated)
{
    var user = await UserLog.GetUserAsync(HttpContextAccessor.HttpContext.User);
    var mail = await UserLog.GetEmailAsync(user);
    <div class="row">
        <div class="col-md-4">
            <form asp-controller="ManageUser" asp-action="Edit" method="post">
                <h1>Edit Account</h1>
                <hr />
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <input placeholder="@UserLog.GetUserName(User)" class="my_inputs" disabled /><br />
                </div>
                <div class="form-group">
                    <input asp-for="EditPersonel.Input.Email" value="@mail" class="my_inputs" /><br />
                    <span asp-validation-for="EditPersonel.Input.Email" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input asp-for="EditPersonel.Input.Password" placeholder="Password" class="my_inputs" /><br />
                    <span asp-validation-for="EditPersonel.Input.Password" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Save" class="btn btn-default" />
                </div>
            </form>
        </div>
    </div>
}

Контроллер

ManageUserController:

        [HttpGet]
        [Authorize]
        public IActionResult Panel()
        {
            return View("../ViewUser/Manage/Panel");
        }

        [HttpGet]
        [Authorize]
        public IActionResult Edit(int? id)
        {
            id = ViewBag.userId = UserManager.GetUserId(HttpContext.User);
            var userId = id;
            if (userId == null)
            {
                return RedirectToAction(nameof(Accounts.AccountController.Login), "Account");
            }
            else
            {
                UserApp user = UserManager.FindByIdAsync(userId.ToString()).Result;
                return View("../ViewUser/Manage/Edit", user);
            }
        }

        [HttpPost]
        [Authorize]
        public async Task<IActionResult> Edit(UserApp userDetail)
        {
            IdentityResult x = await UserManager.UpdateAsync(userDetail);
            if (x.Succeeded)
            {
                return RedirectToAction(nameof(ManageUserController.Panel), "ManageUser");
            }
            return View("../ViewUser/Manage/Edit", userDetail);
        }

После того, как:

У меня ошибка:

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

Edit:

Я добавляю:

            id = UserManager.GetUserId(ViewBag.userId);

Для редактирования [HttpGet] в ManageUserController У меня ошибка:

enter image description here

1 Ответ

0 голосов
/ 09 мая 2019
  • с использованием Microsoft.AspNet.Identity;
  • User.Identity.GetUserId ();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...