如何发送json响应以使用护照进行浏览

时间:2014-10-27 10:35:56

标签: mysql json node.js login passport.js

您好我正在尝试使用passport进行本地登录。一切正常但是我希望能够在用户通过身份验证后显示用户名是使用Node.js和mysql的代码:

passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        passReqToCallback: true // allows us to pass back the entire request to the callback
    },
    function(req, email, password, done) {
        var status = [];
        console.log('-----');

        connection.query('SELECT username FROM user WHERE email ="' + email + '"', function(err, rows) {

            if (err)
                return done(err);
            if (rows.length) {
                status.push({
                    username: rows[0].username
                });
                done(null, JSON.stringify(status)); //output as JSON

                //console.log(JSON.stringify(status)); 


                //res.render ('"status":'+JSON.stringify(status));
            }
        });

    }
));

app.post('/login', passport.authenticate('local', {
    successRedirect: '/loginSuccess',
    failureRedirect: '/loginFailure',
    failureFlash: false
}));

app.get('/loginFailure', function(req, res, next) {
    res.send('Failed to authenticate');
});

app.get('/loginSuccess', function(req, res, next) {
    res.send('Successfully authenticated');
});

1 个答案:

答案 0 :(得分:1)

假设您的身份验证工作正常,Passport使用的用户数据会在每次请求时存储在req.user变量中。将req.user变量传递给视图将为您提供用户信息。

另请查看护照使用的serializeUser()和deserializeUser()函数。您不会在代码中显示它们,但是护照需要它们才能使会话正常工作。基本上,您的LocalStrategy对用户进行身份验证,serializeUser()函数准备会话数据,deserializeUser()函数读取会话数据并创建req.user变量。