我想使用一个需要在node.js中进行用户名/密码身份验证的REST api。使用该api的代码如下:
login_template
使用上面的代码,我得到的错误是:
var request = require('request');
var url = 'http://localhost:3000/api/v1/login/'
request.get(url,{'auth': {'user': 'test35','pass': 'mypassword','sendImmediately': false}},function(err, httpResponse, body) {
if (err) {
return console.error('post failed:', err);
}
console.log('Post successful! Server responded with:', body);
});
该api是用流星恢复编写的,您可以在以下问题的answer here
中看到它在API中,当我删除api的authRequired时:true,即删除
{
"status": "error",
"message": "API endpoint does not exist"
}
,并在使用API的代码中,在上方中,将URL更改为
收件人:
并运行“ node accessRESTapiapi.js”,我可以使用REST api!我无法正确执行的是按照上述设置“ authRequired:true”时的身份验证!请帮助
答案 0 :(得分:0)
编辑:根据评论信息更新
登录样式以获取令牌和后续请求之间的请求样式完全不同:
docs指定登录动作必须通过对 onUpload(event) {
var fd = new FormData();
for (let file of event.files) {
fd.append('file', file);
}
// POST the data to the backend
this.http.post(url, fd);
}
的{{1}}请求来完成,该请求的主体包含POST
或/api/login/
和{{1 }}作为网址编码的参数
username
现在,您需要使用先前保存的email
和password
设置正确的标题
According to the docs,这意味着所有后续请求上的var request = require('request');
var url = 'http://localhost:3000/api/v1/login/'
var user = 'test35';
var pass = 'mypassword';
// Save these for future requests
var userId;
var authToken;
// Use POST instead of GET
request.post(
{
uri: url,
// I'm using form because it matches the urlEncoding behaviour expected by `restivus`
form: { username: user, password: pass }
},
function(err, httpResponse, body) {
if (err) {
return console.error('post failed:', err);
}
var json = JSON.parse(body);
authToken = json.data.authToken;
userId = json.data.userId;
console.log('Post successful! Server responded with:', body);
}
);
和userId
标头
authToken
我们想确保在收到任何进一步的请求之前,先获得X-User-Id
。
这意味着在第一个函数的回调中发出第二个请求,如下所示:
X-Auth-Token