我有方法
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()));
}
答案 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());