Express.js未经授权的错误

时间:2017-06-07 10:40:29

标签: javascript angularjs node.js express

我有方法

router.post('/user',passport.authenticate('jwt', { session: false }), function (request, res) {
  res.send(request.user);
});

和授权令牌

"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIkX18iOnsic3RyaWN0TW9kZSI6dHJ1ZSwic2VsZWN0ZWQi"

当我从邮递员发送请求到这条路线时,一切正常。

但是当我从角度应用程序发送带有相同令牌的请求时,它会抛出未经授权的错误

    getUser() {
    const headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('Authorization', localStorage.getItem('token'));
    return this.http.post('localhost:8000/api/user/', {
      headers
    })
      .map((data: Response) => data.json())
      .catch((error: Response) => Observable.throw(error.json()));
  }

2 个答案:

答案 0 :(得分:0)

不是像标题对象一样发送标题,而是使用RequestOptions来包装它,然后通过您的帖子请求发送它。

您的代码将如下:

import { Http, Headers, RequestOptions } from '@angular/http';
getUser() {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('Authorization', localStorage.getItem('token'));
    let options = new RequestOptions({ headers: headers });
    return this.http.post('https://dropali.com/api/user/',options)
        .map((data: Response) => data.json())
        .catch((error: Response) => Observable.throw(error.json()));
}

同样建议而不是在邮件请求首先在变量中检索它时检查它token并检查它是否存在,如果没有,那么如果成功检索则执行必要的操作然后执行make post request

答案 1 :(得分:0)

1。)在服务器端检查您是否获得了令牌。 2.)如果您没有获得令牌,请检查开发者选项>网络>您的请求的标头标记,并查看令牌是否正常 3.)如果不去问题是在前面,否则它可以因为交叉起源..

前端代码示例

 var token = localStorage.Authorization     
 var options = {
     url: '/user',
     method: 'POST',
     headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': token
     }
 }
 $http(options)
    .then((data) => console.log(data.data))
    .catch((error) => console.log(error));

如果前端没问题,那么你应该检查CROSS

app.use((req, res, next) => {
    res.header('Access-Control-Expose-Headers', 'Authorization');
    next();
})

OR

npm install cors --save
app.use(cors());