Я пытаюсь создать функцию canActivate()
, которая будет:
return false;
this.router.navigateByUrl('/login');
, когда код состояния будет 401
из Observable
, т.е. когда HttpErrorResponse
повышено.
==============================================
Это мой сервис:
currentUser(token): Observable<any> {
const url = `${this.BACKEND_URL}/status`;
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
})
};
return this.http.post(url, {'token': token}, httpOptions);
}
Данные ответа представляют собой BLOB-объект Json и могут иметь код состояния 401
или 200
, это код Python:
post_data = request.get_json()
post_token = post_data.get('token')
resp = User.decode_auth_token(post_token)
if not isinstance(resp, str):
user = User.query.filter_by(id=resp).first()
response_object = {
'status': 'success',
'data': {
'user_id': user.id,
'email': user.email.lower(),
'first_name': user.first_name,
'last_name': user.last_name,
'admin': user.admin,
'registered_on': user.registered_on
}
}
return make_response(jsonify(response_object)), 200
response_object = {
'status': 'fail',
'message': resp
}
return make_response(jsonify(response_object)), 401
В настоящее время у меня есть этот код, который не работает с ERROR Error: Uncaught (in promise): HttpErrorResponse
, когда код состояния 401
:
@Injectable()
export class EnsureAuthenticated implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(): Observable<boolean> {
console.log('AUTH');
return this.auth.currentUser(localStorage.getItem('token')).pipe(map(suc => {
if (suc.status = 'success') {
return true;
} else {
this.router.navigateByUrl('/login');
return false;
}
}));
}
}
Я использую угловой 7.0.4.