ASP.Net Core MVC - контекст аутентификации отличается для частичных представлений? - PullRequest
2 голосов
/ 14 марта 2019

У меня есть модель, которая производит 2 частичных просмотра.

  • Один частичный вид содержит форму для изменения вашего имени пользователя
  • Другой содержит форму для изменения пароля

Обе формы возвращаются к методу POST в UserController. Каждый раздел самостоятельно работает нормально. Однако, если я изменяю имя пользователя и затем пытаюсь изменить пароль, контекст аутентификации содержит старое имя пользователя, и я сталкиваюсь с ошибкой.

Логика выглядит примерно так ...


Изменить имя пользователя

контроллер
public async Task<ActionResult> ChangeUsername(ChangeUsernameViewModel model) {
    string oldUsername = model.OldUsername;
    string newUsername = model.NewUsername;

    User user = await this.UserService.GetUserById(this.Authorization.UserId);

    if (user != null)
    {
        // Update username in DB
        User user = await this.UserService.ChangeUsername(user, newUsername);

        // Update cookie
        this._owinContext.Authentication.SignIn(this.Authorization.ToClaimsIdentity());

        // Update ViewModel
        model.OldUsername = newUsername;
        model.NewUsername = string.Empty();
    }

    return View(model);
}
обслуживание
public async Task<User> ChangeUsername(User user, string newUsername) {
    // Blah blah blah... Code to update user with new username
    // and save changes to DB which is then followed by:

    // Change claim in Auth Context
    this._authorization.RemoveValue(MyClaimType.Username);
    this._authorization.AddValue(MyClaimType.Username, newUsername);

    // At this point, I can see that the Auth Context
    // has been updated with the new username.

    return user;
}


Изменить пароль

контроллер
public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model) {
    string oldPassword = model.oldPassword;
    string newPassword = model.newPassword;

    User user = await UserService.GetUserByLogin(this.Authorization.Username, oldPassword);

    // this is where the failure occurs, so I won't 
    // bother writing out the rest.

    // this.Authorization.Username is equal to "oldUsername" 
    // that we saw in the ChangeUsername method.
}

Не переходит ли this._authorization в сервисе на this.Authorization контроллер? this.Authorization отличается для каждого частичного представления по какой-то причине?

1 Ответ

0 голосов
/ 14 марта 2019

Очистить / Сбросить / выйти из сеанса пользователя, Перезагрузить информацию о сеансе с новыми данными, предоставленными пользователем или из db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...