正确使用JWT和Angular 2

时间:2017-10-23 09:22:21

标签: php angular authentication jwt

我在我的PHP服务器上有一个工作后端JWT设置,我终于在几个小时后得到一个结果登录控制台的角度,我现在无法弄清楚如何管理这个结果并等待信息到加载返回结果,如果我删除我的订阅功能,我甚至无法渲染让我困惑的结果,为什么我不能简单地使用地图?

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

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);
    }

现在这将使用正确的信息登录(我在'token'下的PHP中返回一个json,没有问题,这在控制台中显示)

enter image description here

我不确定如何等待,并得到正确的响应,POST的东西似乎对订阅等非常敏感,或者它不会发布数据,所以我不知道如何处理这个

1 个答案:

答案 0 :(得分:1)

Observable.map只是映射已解析的响应,它不会启动请求。您始终需要使用subscribe启动它。这就是观察者的工作方式。

此外,代码是异步的,您无法在代码段的末尾执行console.log(result);,该行将在通过this.http.post()...创建observable后立即运行。

有关详细信息,请参阅文档:

https://angular.io/guide/http

https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/creating_and_subscribing_to_simple_observable_sequences.html

https://scotch.io/tutorials/angular-2-http-requests-with-observables