파일 auth.service.ts
에 loggedIn()
함수를 작성하여 로컬 저장소에서 토큰을 확인한 다음 서버 측에 firebase/php-jwt으로 확인하고 싶습니다. 그러나 Typescript의 코드는 무한 루프를 제공합니다.각도 HTTP 요청 .subscribe() 무한 루프가 발생합니다
auth.service.ts
loggedIn(){
const token: string = localStorage.getItem('id_token');
if (token == null) {
return false;
}
else {
const subs = this.http.post('http://localhost/url/to/myPHP.php', {"token":token})
.map(res=>res.json()).subscribe(data=>{
if(data.valid){
this.valid = true;
} else {
this.valid = false;
}
},
err=>console.log(err));
if (this.valid){
console.log("Valid");
return true;
} else {
console.log("Invalid");
return false;
}
}
}
을 감안할 때 토큰 : 유효한 토큰 여기 내 코드입니다.
결과 : Apache를 종료 할 때까지 오류는 발생시키지 않고 'Valid'의 무한 console.log를 반환하고 true를 반환합니다.
주어진 토큰 : 유효하지 않은 토큰
결과 : Apache를 종료 할 때까지 오류는 발생하지 않지만 '유효하지 않은'무한 console.log와 false를 반환합니다. 내가 시도 무엇
:
loggedIn(){
const token: string = localStorage.getItem('id_token');
if (token == null) {
return false;
}
else {
const subs = this.http.post('http://localhost/url/to/myPHP.php', {"token":token})
.map(res=>res.json()).subscribe(data=>{
if(data.valid){
this.valid = true;
} else {
this.valid = false;
}
},
err=>console.log(err));
if (this.valid){
console.log("Valid");
console.log(this.valid);
return true;
} else {
console.log("Invalid");
console.log(this.valid);
return false;
}
subs.unsubscribe();
return true;
}
}
라인 subs.unsubscribe();
루프를 중단했다, 아직 그대로 Observable<Response>
및 .subscribe()
내부의 코드가 실행되지 않습니다을 취소합니다. 도와주세요.
편집 : 메뉴 바 구성 요소의 4 배에 loggedIn()
*ngIf="authService.loggedIn()
의 사용.
{path:'profile', component:ProfileComponent, canActivate:[AuthGuard]}
'loggedIn()'메서드가 호출되는 횟수를 추적 했습니까? 템플릿에서'ngIf = "loggedIn()"'과 같은 것을 사용 했습니까? 모든 틱에서 평가되고 있습니까? –
예, 저는 5 번이나 전화를 받았습니다. 'ngIf'를 포함하여 –
'ngOnInit()'에서 한 번만 호출하고, 지역 변수를 설정하고, 템플릿의 메소드 대신 변수를 참조하십시오. –