Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在将passport local与restify集成时遇到问题_Node.js_Passport.js_Restify_Passport Local - Fatal编程技术网

Node.js 在将passport local与restify集成时遇到问题

Node.js 在将passport local与restify集成时遇到问题,node.js,passport.js,restify,passport-local,Node.js,Passport.js,Restify,Passport Local,我的示例应用程序如下 var util = require("util") restify = require("restify"), q = require("q"), _ = require("lodash"); //Create Server var server = restify.createServer({ name: "TestAuth" }); server.use(restify.queryParser()); server.use(restify.b

我的示例应用程序如下

var util = require("util")
restify = require("restify"),
    q = require("q"),
    _ = require("lodash");

//Create Server
var server = restify.createServer({
    name: "TestAuth"
});
server.use(restify.queryParser());
server.use(restify.bodyParser());

//Initialize Passport
var passport = require("passport"),
    LocalStrategy = require("passport-local").Strategy;

server.use(passport.initialize());

passport.use(new LocalStrategy(
    function(username, password, done) {
       return done(null, "Test")
    }));

//Session setup

server.post("/login", function(req, res, next) {
    passport.authenticate("local", function(err, user, info) {
        console.log(util.format("%s is logged in!", user))

        res.send(200);
        return next();
    })(req, res, next);
});

server.listen(8080);
当我发出请求/登录?username=test&password=test时,它会点击authenticate回调,但“user”为false。当我使用

server.post("/login", passport.authenticate("local");
我从restify收到了一个错误的请求响应。

在底部的“自定义回调”部分显示,对于您在主代码段中使用passport的方式,请求方法应该是“get”,而不是“post”。我在这里复制了该页面的代码片段:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});
该页面还提供了如何使用passport的其他示例,包括您尝试的“本地”变体。

在底部的“自定义回调”部分显示,对于您在主代码段中使用passport的方式,请求方法应该是“get”,而不是“post”。我在这里复制了该页面的代码片段:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

该页面还提供了如何使用passport的其他示例,包括您尝试的“本地”变体。

我之所以使用post,是因为我打算将身份验证请求用作生成和存储身份验证密钥的更改。其他的例子也允许我尽量复制的帖子。我确实把它改成了一个get,这很管用。我现在想知道身份验证密钥的gen应该与登录绑定在一起,还是客户端应该在获得登录验证并生成并获取身份验证密钥后再次访问服务器?我猜我的问题似乎在于Webstorm REST客户端。出于某种原因,它没有传入请求参数。如果我使用postman或fiddler,效果很好。我之所以使用post,是因为我打算将身份验证请求用作生成和存储身份验证密钥的更改。其他的例子也允许我尽量复制的帖子。我确实把它改成了一个get,这很管用。我现在想知道身份验证密钥的gen应该与登录绑定在一起,还是客户端应该在获得登录验证并生成并获取身份验证密钥后再次访问服务器?我猜我的问题似乎在于Webstorm REST客户端。出于某种原因,它没有传入请求参数。如果我用邮递员或小提琴手,效果很好。