Node.js restify.js+;passport.js未验证GET请求
我有以下代码,每次我输入Node.js restify.js+;passport.js未验证GET请求,node.js,restify,passport.js,Node.js,Restify,Passport.js,我有以下代码,每次我输入0.0.0.0:3000/user?apikey=xxx,本地策略中的代码永远不会运行,它直接进入“未经授权”页面。我试图从服务器上删除passport.authenticate.get('/user')。在调试模式下,我可以看到'apikey'被解析为请求参数映射。所以这里的问题是passport无法对get请求进行身份验证。任何帮助都将不胜感激。谢谢 var restify = require('restify'); // Create server var serv
0.0.0.0:3000/user?apikey=xxx
,本地策略中的代码永远不会运行,它直接进入“未经授权”页面。我试图从服务器上删除passport.authenticate.get('/user')
。在调试模式下,我可以看到'apikey'被解析为请求参数映射。所以这里的问题是passport无法对get请求进行身份验证。任何帮助都将不胜感激。谢谢
var restify = require('restify');
// Create server
var server = restify.createServer({
name: 'server'
});
server.use(restify.queryParser());
server.use(restify.bodyParser());
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function (apikey, done) {
console.log('Entered authentication.');
done(null, null);
}
));
//specify route
server.get('/user', passport.authenticate('local'), function (req, res) {
console.log(req.params);
res.end('haha');
});
server.listen(3000, function () {
console.log('%s listening at %s', server.name, server.url)
});
LocalStrategy用于通过用户名和密码对用户进行身份验证。传递的函数需要3个参数:用户名、密码和回调完成。您的函数只需要两个键就可以完成 此策略不适合您,因为它通过请求中发布的凭据(即从登录页面)对用户进行身份验证,如果您正在使用会话,这将非常有用。另一方面,您必须通过url中的apikey字符串对每个GET请求进行身份验证。因此,您应该编写一个中间件来验证它
server.use(function(req,res,next){
key=req.query['apikey']; //get key from url
//authenticate it
if(valid(key))
next();
else
res.redirect('/unauthorized');
});
在路由器之前使用此选项。本地策略用于通过用户名和密码验证用户。传递的函数需要3个参数:用户名、密码和回调完成。您的函数只需要两个键就可以完成 此策略不适合您,因为它通过请求中发布的凭据(即从登录页面)对用户进行身份验证,如果您正在使用会话,这将非常有用。另一方面,您必须通过url中的apikey字符串对每个GET请求进行身份验证。因此,您应该编写一个中间件来验证它
server.use(function(req,res,next){
key=req.query['apikey']; //get key from url
//authenticate it
if(valid(key))
next();
else
res.redirect('/unauthorized');
});
在路由器之前使用此选项。另一种方法是只使用HTTP基本身份验证。这样,用户ID/密码将在授权头中发送,而不是URI的一部分,因为这是保护服务的一种相当常见的方法(请确保通过HTTPS执行此操作)。我写这个小模块就是为了做这个,部分借用了一些例子
另一种方法是简单地使用HTTP基本身份验证。这样,用户ID/密码将在授权头中发送,而不是URI的一部分,因为这是保护服务的一种相当常见的方法(请确保通过HTTPS执行此操作)。我写这个小模块就是为了做这个,部分借用了一些例子
我想将身份验证添加到我的RESTAPI中。我在寻找解决方案(令牌服务器、openid、passport.js等),没有一个是简单的、可访问的,对我来说还可以。我对节点中间件的无知是有罪的。您的解决方案非常简单和易于访问,谢谢。如果URL中的密钥不易受中间人攻击的影响?是否需要SSL?我想将身份验证添加到我的REST API中。我在寻找解决方案(令牌服务器、openid、passport.js等),没有一个是简单的、可访问的,对我来说还可以。我对节点中间件的无知是有罪的。您的解决方案非常简单和易于访问,谢谢。如果URL中的密钥不易受中间人攻击的影响?是否需要SSL?
var basicAuth = require(__dirname + '/../utils/authn.js');
exports.count = function (req, res, next) {
basicAuth.authenticate(req, res, next, function() {
validateParam(req.params.uid, next);
var url = '/count/' + encodeURIComponent(req.params.uid);
processRequest(req, res, next, url);
});
};