ionic2 / Angular2中的错误处理

时间:2017-03-02 22:03:48

标签: php angularjs ionic2 laravel-5.4

尝试将Laravel 5.4中内置的API与离子2集成,并努力处理错误

我想做什么:

  • 使用Laravel密码服务(OAuth2)验证登录信息。
  • 经过身份验证后,将返回访问令牌。
  • 访问令牌在GET API调用的标头中传递以接收 用户详情。

我能够#1和#2但是被困在#3。

这是我的login.ts代码

public login() {
        this.showLoading();
        this.auth.login(this.loginCredentials).subscribe(allowed => {
            if (allowed) {
                setTimeout(() => {
                    this.loading.dismiss();
                    this.nav.setRoot(HelloIonicPage)
                });
            } else {
                this.showError("Access Denied");
            }
        },
        error => {
            this.showError(error);
        });
    }

auth是一个服务提供者,具有登录方法。

//Function to get access token

public login(credentials) {
    if (credentials.email === null || credentials.password === null) {
        return Observable.throw("Please insert credentials");
    } else {
        return Observable.create(observer => {
            var link = 'http://localhost/XXX/public/oauth/token';
            var vars =  {
                password: "XXX",
                username: "XXXXXX",
                grant_type: 'password',
                client_id: "XXXXX",
                client_secret: 'XXXXXX',
                scope: ''
            }

            this.http.post(link, vars)
            .map(res => res.json())
            .subscribe(
                data => { let user = this.getUserFromAccessToken(data);
                    console.log(user);
                    observer.next(user);
                },
                err => { observer.error(err.json()); }
                () => {
                    console.log('Completed..');
                }
            );


        });
    }
}


//Function to get user from the accessToken

private getUserFromAccessToken(oAuthData) {
    let headers = new Headers({ 'Content-Type': 'application/json','Accept': 'application/json','Authorization': 'Bearer ' + oAuthData.access_token });
    let options = new RequestOptions({ headers: headers });

    let link = 'http://localhost/XXXX/public/api/v1/user';

    return this.http.get(link, options)
    .map(res => res.json())
    .subscribe(
        data => this.currentUser = data.user,
        err => this.error = err
    );
}

currentUsererror被定义为AuthService类的属性。

如果未返回访问令牌或未从访问令牌返回用户,我应该如何确保引发错误。

0 个答案:

没有答案