【问题标题】:Basic node.js express authentication not working基本 node.js 快速身份验证不起作用
【发布时间】:2016-05-02 02:14:22
【问题描述】:

我是 node.js 身份验证的新手。我想使用本地护照做一些基本的身份验证。但是当我尝试它时,它总是进入身份验证失败。

我正在关注本教程 http://www.sitepoint.com/local-authentication-using-passport-node-js/

这是我目前所拥有的:

var express = require('express');
var app = express();
var qs = require('querystring');
var pg = require('pg');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
//var expressSession = require('express-session');


//app.use(expressSession({secret: 'mySecretKey', cookie: { maxAge: 60000 }, resave: true, saveUninitialized: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(__dirname + '/public'));


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

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

// in here I know I am supposed to connect to database, and check if the username,password is there, but for now, i'll just force it to return a user, like they exist.
passport.use(new LocalStrategy(function(username, password, done) {
    console.log(1);  // does not even print this
    //return done(null, false);
    var r = done(null, {
      'username': username,
      'password': password
    });
    console.log(r);
    return r;
}));


/*
 * Visit the home page.
 */
app.get('/', function (req, res) {
    var dest = 'index.html';
    res.sendFile(dest, { root: __dirname });
});
/*
 * Login.
 */
app.post('/login',
    passport.authenticate('local', {
        successRedirect: '/loginSuccess.html',
        failureRedirect: '/loginFailure.html'
    })
);

var server = app.listen(process.env.PORT || 3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('My App started at http://%s:%s', host, port);
});

有人知道这是怎么回事吗?

还有谁能解释一下这个基本身份验证是如何工作的,以及序列化/反序列化函数的用途是什么?

谢谢

【问题讨论】:

    标签: javascript node.js authentication passport.js


    【解决方案1】:

    您的应用缺少 body-parser 中间件,这是解析传入的 POST 数据所必需的。

    ...
    app.use(bodyParser.urlencoded({ extended : true }));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(express.static(__dirname + '/public'));
    ...
    

    【讨论】:

    • 现在它成功了,但它也记录到控制台body-parser deprecated undefined extended: provide extended option server.js:18:20。你知道怎么解决吗?
    • @omega 记录在案here:您需要明确设置extended 选项。我已经相应地编辑了我的答案。
    猜你喜欢
    • 2014-09-06
    • 2014-01-22
    • 2016-01-11
    • 2015-01-02
    • 1970-01-01
    • 2020-07-14
    • 2011-11-12
    • 2014-12-31
    • 2016-11-17
    相关资源
    最近更新 更多