【问题标题】:Accessing tokens and response data访问令牌和响应数据
【发布时间】:2016-09-08 11:44:05
【问题描述】:

尝试使用 Angular 2 找出一些基本身份验证。我希望我的组件检查令牌,如果它存在,则导航到正确的位置,但如果它不显示服务返回的错误消息。这是服务调用:

this._loginService.login(loginQuery)
        .subscribe(
            (token: any) => this._router.navigate( ['User', { username: user }] ),
            (data) => { this.errorMessage = data.ErrorMessage; }
        )

这是服务的代码:

return this._http.post('serivcelink,
                            body,
                            {headers:headers})
        .map((res : any) => {
            let data = res.json();
            this.token = data.TeamMember.UserName;
            localStorage.setItem('token', this.token);
        });

我得到了我想要的令牌行为,只是我无法访问组件中的响应对象,因此无法显示错误消息。

如何检查令牌并访问响应数据?

【问题讨论】:

    标签: javascript typescript angular local-storage angular2-services


    【解决方案1】:

    您可以使用 if 语句检查您的令牌是否存在,否则显示错误消息:

    this._loginService.login(loginQuery)
            .subscribe(
                (data: any) => {
                    if (localStorage.getItem('token')) {
                        this._router.navigate( ['User', { username: user }] )
                    } else {
                        this.errorMessage = data.ErrorMessage;
                    }
                }
            )
    

    【讨论】:

    • 谢谢,这正是我要找的。我不确定语法。
    【解决方案2】:

    您需要在map 回调中返回一些内容,即在您的情况下为this.token

    return this._http.post('serivcelink,
                            body,
                            {headers:headers})
        .map((res : any) => {
            let data = res.json();
            this.token = data.TeamMember.UserName;
            localStorage.setItem('token', this.token);
            return this.token; // <-------
        });
    

    您返回的内容将作为参数接收到subscribe 方法的回调中。

    【讨论】:

    • 感谢您的回复。这允许我返回响应,但随后会破坏我想要的 subscribe 的行为。那么后续问题是在更改路线之前在subscribe 方法中检查令牌的最佳方法是什么?
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2011-12-31
    • 2020-02-26
    相关资源
    最近更新 更多