Доброго времени суток! И так снова наверное для кого то банальный вопрос(но не для меня).
И так приложение ASP.NET Core + Angular 7. Работаю с аутентификацией. В контролере пробую создать пользователя
var result =await _userManager.CreateAsync(applicationUser, model.Password);
return Ok(result);
Если есть ошибка то получаю например следующее:
{
"succeeded": false,
"errors": [
{
"code": "PasswordTooShort",
"description": "Passwords must be at least 6 characters."
},
{
"code": "PasswordRequiresLower",
"description": "Passwords must have at least one lowercase ('a'-'z')."
}
]
}
Если же все ок тогда:
{
"succeeded": true,
"errors": []
}
Этот ответ обрабатываю в компоненте Angular следующим образом:
this.service.register().subscribe(
(res: any) => {
if (res.succeeded) {
this.service.formModel.reset();
this.toast.success('You create a user','SUCCESS');
} else {
res.errors.forEach(element => {
switch (element.code) {
case 'DuplicateUserName':
this.toast.error('User with this name is exist', 'ERROR');
break;
default:
this.toast.error(element.description,'ERROR');
break;
}
});
}
},
err => {
this.toast.error(err.message,'ERROR');
}
);
Здесь все работает все ок.
При неудачной аутентификации делаю следующие:
return BadRequest(new { message = "Password is incorect" });
либо
return BadRequest(new { message = "User name is incorect" });
Как результат получаю JSON формата
{
"message": "User name is incorect"
}
При удачной аутентификации
return Ok(new { token });
как результат - что то типа этого:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySUQiOiIwMDA3MTBmMi1mNWM1LTRmMzgtYmQ3My02MjhlNmE0YTg3YmEiLCJuYmYiOjE1NTc4NzE1NzgsImV4cCI6MTU1Nzg3MTg3OCwiaWF0IjoxNTU3ODcxNTc4fQ.n2vfnFbvrH7MnDwAnI2055_fKpG3wEjRItFdTr38mlE"
}
Фууу наверное много лишнего здесь набросал, но что бы было понятно... даже таким как я)))
Так вот добрались до проблемы) Хочу вывести сообщения об ошибки при аутентификации, но не просто этого типа
if(err.status == 400){
this.toast.error('Username or password is bad', 'Authentication error');
}else{
console.log(err);
}
А именно вытянуть из JSON "message".
Пробовал как то так:
this.service.login(form.value).subscribe(
(res:any)=>{
if(res.token){
localStorage.setItem('token', res.token);
this.router.navigateByUrl('/home');
}else{
if(res.message){
this.toast.error(res.message,'ERROR');
}
}
},
err=>this.toast.error(err.message,'ERROR')
);
Но не работает.... Я так понимаю при BadRequest "message" из JSON не присваивается параметрам метода:
(method) Observable<Object>.subscribe(next?: (value: Object) => void, error?: (error: any) => void, complete?: () => void): Subscription (+1 overload)
Ну или я что то криво пишу.
Как вытянуть значение "message" из моего JSON?
Заранее благодарен... И извините за такую простыню текста)))