0
jwtヘッダーが存在するバックエンドAPIに要求を行うことによって、使用が認証されているかどうかを確認しようとしています。ユーザーが返された場合、返されない場合は、権限のないユーザーに戻ります。角+ノード - Auth Guardを使用して認証されたユーザーを確認する方法
問題はauth.serviceがクエリを終了していないため、auth.guardが起動され、console.logに未定義が返されることです。これを達成するために、ここで最高の実装ですいただきまし
auth.guard.ts
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { Router } from '@angular/router';
import { AuthService } from '../services/auth.service';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
console.log(this.authService.isAuthenticated());
if (this.authService.isAuthenticated()) {
return true;
}
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });
return false
}
}
auth.service.ts
import { JwtService } from './jwt.service';
import { Injectable } from '@angular/core';
import { ApiService } from './api.service';
import { UserService } from './user.service';
@Injectable()
export class AuthService {
user: any;
constructor(
private apiService: ApiService,
private jwtService: JwtService,
private userService: UserService) {
this.getAuthenticatedUser().subscribe(res => {
console.log(res);
this.user = res;
}, (error) => {
this.user = null;
});
}
login(credentials) {
let endpoint = 'auth/'
return this.apiService.post(endpoint, credentials)
.map(res => {
this.jwtService.saveToken(res.data.jwtToken);
window.localStorage.setItem('user_id', res.data.user._id);
});
}
logout() {
}
isAuthenticated() {
return this.user;
}
getAuthenticatedUser() {
let endpoint = 'auth/'
return this.apiService.get(endpoint);
}
}
?
私の質問です、のlocalStorageに手動loggedInfo項目を追加し、任意の値に設定するから誰かを防ぐいただきました。 canActivate関数は、アイテムが見つかるとtrueを返します。 – KHAN
@KHANここでトークンを使うべきです!あなたはトークンとisloggedinの両方が真であることを確認する必要があります – Sajeetharan
両方が真であることを確認することはどういう意味ですか?それらが両方ともローカルストレージに存在する項目であることを確認するなら、私はまだ同じ問題を抱えています。ローカルアイテムの整合性は変更/追加することができるので、私は唯一のオプションは毎回バックエンドに電話をかけることを前提としていました... – KHAN