【发布时间】:2019-06-24 11:58:23
【问题描述】:
我正在尝试创建一个 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);
}
响应数据是 Json blob,可以是 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
当状态码为401 时,我目前有此代码失败并显示ERROR Error: Uncaught (in promise): HttpErrorResponse:
@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;
}
}));
}
}
我正在使用 Angular 7.0.4。
【问题讨论】:
-
不,抱歉我删除了标签。
标签: angular observable canactivate