Php 正确使用JWT和Angular 2

Php 正确使用JWT和Angular 2,php,angular,authentication,jwt,Php,Angular,Authentication,Jwt,我在我的PHP服务器上有一个工作的后端JWT设置,经过几个小时后,我终于得到了一个登录angular控制台的结果,我现在不知道如何管理这个结果,并等待加载的信息返回结果,如果我删除订阅函数,我甚至无法呈现结果,这让我很困惑,为什么我不能简单地使用地图 无论如何,这是我的登录功能: login(username: string, password: string): Observable<boolean> { let result = false; va

我在我的PHP服务器上有一个工作的后端JWT设置,经过几个小时后,我终于得到了一个登录angular控制台的结果,我现在不知道如何管理这个结果,并等待加载的信息返回结果,如果我删除订阅函数,我甚至无法呈现结果,这让我很困惑,为什么我不能简单地使用地图

无论如何,这是我的登录功能:

login(username: string, password: string): Observable<boolean> {
        let result = false;
        var postData = "email=" + username + "&password=" + password;
        let headers: Headers;
        headers = new Headers();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');

        this.http.post('https://callum.tech/jwt/', postData, {headers: headers})
            .take(1)
            .map((res:any) => res.json())
            .subscribe(
                data => {
                    console.log(data.token)
                    if (data.token) {
                        console.log("token exists");
                        // set token property
                        this.token = data.token;

                        // store username and jwt token in local storage to keep user logged in between page refreshes
                        localStorage.setItem('currentUser', JSON.stringify({ username: username, token: data.token }));
                        result = true;
                    }
                },
                err => {console.log(err)}
                //,() => console.log("done!?")
            );
        console.log(result);
        return Observable.of(result);
    }
login(用户名:string,密码:string):可观察{
让结果=假;
var postData=“email=“+username+”&password=“+password;
让标题:标题;
headers=新的headers();
headers.append('Content-Type','application/x-www-form-urlencoded');
this.http.post('https://callum.tech/jwt/,postData,{headers:headers})
.采取(1)
.map((res:any)=>res.json())
.订阅(
数据=>{
console.log(data.token)
if(data.token){
日志(“令牌存在”);
//设置令牌属性
this.token=data.token;
//将用户名和jwt令牌存储在本地存储中,以在页面刷新之间保持用户登录
setItem('currentUser',JSON.stringify({username:username,token:data.token}));
结果=真;
}
},
err=>{console.log(err)}
//,()=>console.log(“完成!”)
);
控制台日志(结果);
可观察的回报(结果);
}
现在,这将使用正确的信息登录(我在PHP中的“token”下返回一个json,没有问题,这显示在控制台中)


我不确定如何等待并获得正确的响应,帖子内容似乎对订阅等非常敏感,或者它不会发布数据,因此我不确定如何处理这一可观察的问题。map只映射已解决的响应,它不会启动请求。您始终需要使用
subscribe
来启动它。这就是可见光的工作方式

代码也是异步的,您不能执行
console.log(result)在代码片段的末尾,在通过
this.http.post()…
创建可观察对象之后,将立即运行该行

有关更多信息,请参阅文档: