Это мой первый раз, когда я кодирую Перехватчик в моем угловом клиенте.Я добавил несколько статей в Google, чтобы добавить HttpInteceptor.Я позвонил в веб-интерфейс и получил токен.В журнале консоли я проверил, что токен получен, и добавил его в свое локальное хранилище.Вот мой угловой сервисный код:
loginUser(user) : Observable<boolean> {
var reqHeader = new HttpHeaders({ 'Content-Type': 'application/x-www-urlencoded','No-Auth':'True' });
return this.http
.post('http://localhost:55009/api/login', user )
.map((data: any) => {
this.token = data.token.token;
localStorage.setItem('userToken', data.token.token);
this.errorMessage = data.token.error;
console.log('token ===> ' + data.token.token);
console.log('isTokenValid ===> ' + this.isTokenValid());
console.log('errorMessage ===> ' + this.errorMessage);
return this.isTokenValid();
})
// .map((response:any) => response.json())
.catch(this.handleError);
}
Когда я щелкнул по другому маршруту / меню, я прошел через код в файле interceptor.ts.Когда код вызывает localStorage.getItem и login.getToken, но оба возвращают пустые строки.Я проверил образец интерактивного учебного пособия и не увидел ничего другого в своем коде:
export class AuthInterceptor implements HttpInterceptor {
public userToken: string;
constructor(private router: Router, public login: LoginService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.userToken = this.login.getToken();
if (req.headers.get('No-Auth') == "True")
return next.handle(req.clone());
if (localStorage.getItem('userToken') != null) {
const clonedreq = req.clone({
headers: req.headers.set("Authorization", "Bearer " + localStorage.getItem('userToken'))
});
return next.handle(clonedreq)
.do(
succ => { },
err => {
if (err.status === 401)
this.router.navigateByUrl('/home');
}
);
}
else {
this.router.navigateByUrl('/home');
}
}
}