如何在Node.js中使用需要用户名/密码身份验证的REST API

时间:2018-07-15 07:40:44

标签: node.js meteor restivus meteor-restivus

我想使用一个需要在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更改为

  

'http://localhost:3000/api/v1/login/

收件人:

  

http://localhost:3000/api/v1/articles/

并运行“ node accessRESTapiapi.js”,我可以使用REST api!我无法正确执行的是按照上述设置“ authRequired:true”时的身份验证!请帮助

1 个答案:

答案 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

用于将来的请求

现在,您需要使用先前保存的emailpassword设置正确的标题

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