【问题标题】:Express.js Unauthorized errorExpress.js 未经授权的错误
【发布时间】:2017-06-07 10:40:29
【问题描述】:

我有办法

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

【问题讨论】:

  • 检查标题一次。
  • 你能分享角码 sn-p 没有它没人能帮忙。
  • @Shubham 我检查标头标记是否相同
  • 你在使用 ionic 吗?还是这个本地存储是浏览器的本地存储?

标签: javascript angularjs node.js express


【解决方案1】:

不要像标头对象那样发送标头,而是使用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 时执行任何必要的操作。

【讨论】:

  • 我将标头包装到 RequestOptions 但结果相同
  • 您在此处引用的本地存储是否来自 ionic 应用程序的本地存储,即此代码 sn-p 属于 ionic 应用程序?
  • 这是浏览器的本地存储
  • 您是否尝试过打印标头令牌以检查您是否在您的发布请求中获得了一个
  • 你可以做到console.log(req.get("Authorization"));
【解决方案2】:

1.) 在服务器端检查您是否获得了令牌。 2.) 如果您没有获得令牌,请检查 Developer option > Network > 您的请求的标头标签并查看令牌是否正在运行 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();
})

或

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

【讨论】:

    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-04-19
    • 2013-02-07
    相关资源
    最近更新 更多