升级到快递4护照停止工作

时间:2014-08-25 23:47:25

标签: node.js express passport.js

我正在升级快递4,我的护照每次都失败了。它甚至没有在passport.use(新的LocalStrategy。

)中登录到控制台

每次重定向/失败而不会遇到任何断点

// Use the LocalStrategy within Passport.
//   Strategies in passport require a `verify` function, which accept
//   credentials (in this case, a username and password), and invoke a callback
//   with a user object.  In the real world, this would query a database;
//   however, in this example we are using a baked-in set of users.
passport.use(new LocalStrategy(
    function(username, password, done) {
        console.log("LocalStrategy working...");
        // asynchronous verification, for effect...
        process.nextTick(function() {

            // Find the user by username.  If there is no user with the given
            // username, or the password is not correct, set the user to `false` to
            // indicate failure and set a flash message.  Otherwise, return the
            // authenticated `user`.
            findByUsername(username, password, function(err, user) {
                if (err) {
                    return done(err);
                }
                if (!user) {
                    return done(null, false, {
                        message: 'Unknown user ' + username
                    });
                } else {
                    return done(null, user);
                }

            })

        });
    }
));

app.use(cookieParser('keyboard cat'));
app.use(session({
    secret: 'keyboard cat',
    saveUninitialized: true,
    resave: true
}));

// Initialize Passport!  Also use passport.session() middleware, to support
// persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());

app.post('/login', passport.authenticate('local', {
        failureRedirect: '/failure',
        failureFlash: false
    }),
    function(req, res) {
        res.cookie('userdata', req.user);
        switch (req.user.role) {
            case 'candidate':
                res.redirect('/app/candidates');
                break;
            case 'employer':
                res.redirect('/app/employers');
                break;
            case 'provider':
                res.redirect('/app/providers');
                break;
            case 'admin':
                res.redirect('/app/admin');
                break;
            default:
                break;
        }
    });

2 个答案:

答案 0 :(得分:0)

假设您已包含所有相关代码,则失败的原因可能是缺少正文解析器。身份验证策略将尝试查找req.bodyreq.query中的用户名和密码字段,如果没有使用正文解析器req.body将为空。然后该策略将fail straight away,因为它没有任何内容可以传递给您的验证回调。

您需要使Express应用程序使用相关的主体解析器,例如:

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

答案 1 :(得分:0)

你是否包含了LocalStrategy?

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

app.use(express.cookieParser()); // read cookies 
app.use(express.bodyParser()); // get information from html forms