【问题标题】:Node passport-local strategy always fails节点护照本地策略总是失败
【发布时间】:2015-06-03 02:53:58
【问题描述】:

我正在使用 Node.js Passport 模块来构建身份验证过程,我无法弄清楚为什么验证总是失败,即使我每次都从验证回调中返回成功。为了简单起见,我只使用了passport-local 策略,没有持久存储:

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var express = require('express');
var server = express();

passport.serializeUser(function (user, done) {
  done(null, user);
});

passport.deserializeUser(function (id, done) {
  done(null, id);
});

passport.use(new LocalStrategy(
  function (username, password, done) {
    // Would perform lookup and verification here.
    // Instead return a valid user object every time.
    var user = { username: username };
    return done(null, user);
  }
));

server.post('/login', passport.authenticate('local', { failureRedirect: '/failure' }), function (req, res) {
  res.send('access granted');
});

var port = process.env.PORT || 3000;
server.listen(port,  function() {
  console.log('Listening on port ' + port);
});

通过添加占位符用户序列化/反序列化方法已经解决了类似的问题,但我已经准备好了。

这是一个 CURL 调用,使用用户名和密码点击上述内容:

curl -X "POST" "http://127.0.0.1:3000/login" \
  --data-urlencode "username=alice" \
  --data-urlencode "password=supersecret"

当我执行该 POST 时,响应每次都包含 HTTP 302 失败重定向到 /failure,即使我返回 null(没有错误),以及 LocalStrategy 回调中的虚拟用户对象。我忽略了什么?

【问题讨论】:

    标签: javascript node.js authentication


    【解决方案1】:

    我忽略了两件事:

    • 没有调用passport.initialize() 中间件
    • 我没有解析请求正文,因为 Express 不包含开箱即用的内容

    现在我在顶部的 require 块包含了这两个缺失的项目,并且在 POST 到 /login 时返回 200 OK:

    var passport = require('passport');
    var LocalStrategy = require('passport-local').Strategy;
    var express = require('express');
    var bodyParser = require('body-parser');
    var server = express();
    server.use(passport.initialize());
    //server.use(passport.session()); -- For persistent login sessions
    server.use(bodyParser.urlencoded({ extended: true }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2016-05-29
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多