Javascript 如何从auth(用户登录与否)获取值true false
如何检查用户是否登录,我使用此Javascript 如何从auth(用户登录与否)获取值true false,javascript,angular,typescript,Javascript,Angular,Typescript,如何检查用户是否登录,我使用此 ngOnInit() { this.auth.subscribeLogger().subscribe( (data: any) => { this.checkUserLogin = data; } ); } 用于获取值true或false,但我无法控制台记录它,我知道它是错误的,但如果用户登录或未登录authservice,我如何获取值 这是文件history.guard.ts import {
ngOnInit() {
this.auth.subscribeLogger().subscribe(
(data: any) => {
this.checkUserLogin = data;
}
);
}
用于获取值true或false,但我无法控制台记录它,我知道它是错误的,但如果用户登录或未登录authservice,我如何获取值
这是文件history.guard.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { AuthService } from 'app/core/service';
@Injectable({
providedIn: 'root'
})
export class HistoryGuard implements CanActivate {
checkUserLogin: boolean;
constructor(
private router: Router,
private auth: AuthService,
){}
ngOnInit() {
this.auth.subscribeLogger().subscribe(
(data: any) => {
this.checkUserLogin = data;
}
);
}
canActivate() {
if(this.checkUserLogin){
return true;
}
else{
return this.router.navigate(['mypage']);
}
}
}
也许您可以使用async Wait来尝试这种方法
async canActivate() {
const isAuthenticate = await this.auth.subscribeLogger();
if(!isAuthenticate){
return false;
}
else {
return this.router.navigate(['mypage']);
}
}
ngOnInit应在指令或组件中实现。您可以尝试从类中删除它,并修改
canActivate
中的逻辑,如下所示:
canActivate() {
this.auth.subscribeLogger().subscribe(
(data: any) => {
if(data) {
return true;
} else {
return this.router.navigate(['mypage']);
}
}
);
}
CanActivate可以返回可观察到的 还没有测试过,但类似的东西应该可以工作:
constructor(private router: Router, private auth: AuthService){}
canActivate(route: ActivatedRouteSnapshot, routeState: RouterStateSnapshot): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {
return this.auth.subscribeLogger().pipe(
map(isUserLoggedin => {
if (!isUserLoggedin) {
this.router.navigate(['mypage']);
}
return isUserLoggedin;
});
}
构造函数(专用路由器:路由器,专用身份验证:身份验证服务){
canActivate(路由:ActivatedRouteSnapshot,routeState:RouterStateSnashot):可观察的|承诺|布尔| UrlTree{
返回此.auth.subscribeLogger()管道(
映射(isUserLoggedin=>{
如果(!isUserLoggedin){
这个.router.navigate(['mypage']);
}
返回isUserLoggedin;
});
}
它的值仍然为false!我测试时没有使用JWT_标记(false),然后使用JWT(仍然为false)它不起作用:(甚至我在canActivate()之后加上:any)我试图重现这个场景,保持它非常基本..并且@Stavm的答案更有希望。我知道了,但我仍然误解了在我的情况下如何获取auth值我想你的this.auth.subscribeLogger
没有返回值它总是返回值“false”使用此链接可以获取完整代码[我将Observable更改为Observable但不起作用:(在我放入JWT_令牌后,值仍然为false非true。好的,请添加console.log(isUserLoggedIn)
if(!isUserLoggedIn)上方的一行…
输出是什么?始终为false!因为此subscribeLogger我在auservice中将其设置为false!我是否需要在auth.service.ts中创建新func因为subscribeLogger始终返回false?我是否需要在AuthService中编写一些代码才能订阅?