node.js - restify.js + Passport.js 未验证 GET 请求

标签 node.js restify passport.js

我有以下代码,每次输入 0.0.0.0:3000/user?apikey=xxx 时,本地策略中的代码永远不会运行,它会直接进入“未经授权”页面。我尝试从 server.get('/user') 中删除passport.authenticate。在 Debug模式下,我可以看到“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 个参数:用户名、密码和完成的回调。您的函数只需要两个 apikey 即可完成。

此策略不适合您,因为它通过请求中发布的凭据(即从登录页面)对用户进行身份验证,如果您使用 session ,这会很有帮助。另一方面,您必须通过 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');
});

在路由器之前使用它。

关于node.js - restify.js + Passport.js 未验证 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436162/

相关文章:

node.js - 在不读取整个文件的情况下读取 Node.js 中的第 n 行

javascript - 在哈巴狗中使用 bool 局部变量

javascript - 如何使用 Node 中的 Promises 同时执行并行异步多个请求

node.js - CORS 预检请求后 302 重定向到 nodejs 服务器

angularjs - 禁用 cookie 时的 Passport session 管理

node.js - npm 删除无关包

node.js - 无法从应用程序容器连接到 postgres DB docker 容器

javascript - 只能发出一个 GET 请求,没有错误 : "Can' t set headers after they are sent. "

node.js - TypeError : restify.authorizationParser不是 Node 中的函数

node.js - 在 Node 和 Passport 中反序列化用户时没有返回任何内容