Javascript 如何使用node.js中需要用户名/密码身份验证的REST api
我想使用一个RESTAPI,它需要node.js中的用户名/密码身份验证。使用api的代码如下所示:Javascript 如何使用node.js中需要用户名/密码身份验证的REST api,javascript,node.js,meteor,meteor-restivus,Javascript,Node.js,Meteor,Meteor Restivus,我想使用一个RESTAPI,它需要node.js中的用户名/密码身份验证。使用api的代码如下所示: var request=require('request'); var url='1〕http://localhost:3000/api/v1/login/' get(url,{'auth':{'user':'test35','pass':'mypassword','sendInstance':false}},函数(err,httpResponse,body){ 如果(错误){ 返回控制台。错误
var request=require('request');
var url='1〕http://localhost:3000/api/v1/login/'
get(url,{'auth':{'user':'test35','pass':'mypassword','sendInstance':false}},函数(err,httpResponse,body){
如果(错误){
返回控制台。错误('post失败:',错误);
}
log('Post successful!服务器响应为:',正文);
});
使用上述代码,我得到的错误是:
{
“状态”:“错误”,
“消息”:“API终结点不存在”
}
api是用meteor restivus编写的,您可以在下面的问题中看到它
在API中,当我删除API的authRequired时:true,即remove
{
路线选项:{
authRequired:true
}
}
在使用上述API的代码中,将url更改为
"
致:
运行“node accessRESTapi.js”,我就可以使用RESTAPI了!我无法正确执行的是在按照上述设置“authRequired:true”时的身份验证!请帮助编辑:根据评论中的信息更新 登录以获取令牌与后续请求的请求风格截然不同: 用于登录 指定登录操作必须通过对
/api/login/
的POST
请求完成,请求的主体包含用户名
或电子邮件
和密码
作为url编码参数
var request=require('request');
var url='1〕http://localhost:3000/api/v1/login/'
var user='test35';
var pass='mypassword';
//保存这些以备将来的请求
var用户id;
var-authToken;
//使用POST而不是GET
请寄(
{
uri:url,
//我之所以使用表单,是因为它符合` restivus'所期望的urlEncoding行为`
表单:{用户名:用户,密码:pass}
},
功能(错误、httpResponse、正文){
如果(错误){
返回控制台。错误('post失败:',错误);
}
var json=json.parse(body);
authToken=json.data.authToken;
userId=json.data.userId;
log('Post successful!服务器响应为:',正文);
}
);
未来的请求
现在,您需要使用先前保存的userId
和authToken
,这意味着所有后续请求上的X-User-Id
和X-Auth-Token
头
var request=require('request');
var url='1〕http://localhost:3000/api/v1/articles/'
请求({
uri:url,
标题:{
“X-User-Id”:userId,
“X-Auth-Token”:authToken
}
},函数(错误,httpResponse,body){
如果(错误){
返回控制台。错误('get failed:',err);
}
log('获取成功!服务器响应:',正文);
});
综合起来: 我们希望确保在发出任何进一步请求之前获得
authToken
这意味着在第一个函数的回调中发出第二个请求,如下所示:
var request=require('request');
var url='1〕http://localhost:3000/api/v1/login/';
var user='test35';
var pass='mypassword';
//保存这些以备将来的请求
var用户id;
var-authToken;
//使用POST而不是GET
请寄(
{
uri:url,
//我之所以使用表单,是因为它符合` restivus'所期望的urlEncoding行为`
表单:{用户名:用户,密码:pass}
},
功能(错误、httpResponse、正文){
如果(错误){
返回控制台。错误('post失败:',错误);
}
var json=json.parse(body);
authToken=json.data.authToken;
userId=json.data.userId;
log('Post successful!服务器响应为:',正文);
//现在我们提出第二个要求
//欢迎来到地狱
var articlesUrl=http://localhost:3000/api/v1/articles/';
请求({
uri:articlesUrl,
标题:{
“X-User-Id”:userId,
“X-Auth-Token”:authToken
}
},函数(错误,httpResponse,body){
如果(错误){
返回控制台。错误('post失败:',错误);
}
log('获取成功!服务器响应:',正文);
});
}
);