localStorage中的JWT仅在刷新页面后起作用

时间:2016-11-20 04:29:20

标签: javascript authentication angular jwt angular-local-storage

所以我正在开发一个angular2应用程序并尝试在登录后生成JWT,以便可以获取用户的个人资料信息。我可以成功登录,那是我生成令牌的时候。登录后,我将用户路由到配置文件页面,这就是我调用api获取用户信息的地方。所有这一切只有在我登录并刷新到页面后才有效。

this.auth_service
      .Login(this.email, this.password)
      .subscribe(
              data => {
                         this.global_events.change_nav_bar.emit(true)
                         console.log('logged in successfully: ' + data)
                         this.router.navigate(['/profile'])
                     })
上面的

// auth_service调用此方法

Login(email, password): Observable<boolean>
    {
        return this.http
                    .post('/api/login', JSON.stringify({email: email, password: password}), this.Get_Headers('no_auth'))
                    .map(Handle_Response)

        function Handle_Response(response: Response)
        {
            let token = response.json() && response.json().token
            if(token)
            {
                this.token = token
                localStorage.setItem('current_user', JSON.stringify({ email: email, token: token }))
                return true
            }
            else
                return false
        }
    }

//然后在我的个人资料组件中,我这样做。我已尝试过不同的超时时间。

ngOnInit(): void
    {
        this.global_events.change_nav_bar.emit(true)

        setTimeout(() => this.Get_User_Data(), 10000)
    }

1 个答案:

答案 0 :(得分:1)

我通过直接从localStorage中提取令牌而不是在authenticationService中设置来解决这个问题(并没有真正解决,但找到了另一个解决方案)