У меня есть модель, которая производит 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
отличается для каждого частичного представления по какой-то причине?