javascript - Passportjs 获取身份验证错误消息

标签 javascript node.js express passport.js

我正在使用 Passportjs 进行 Facebook 身份验证。这是我的 Facebook 策略:

passport.use(new FacebookStrategy({
        clientID: config.facebook.clientID,
        clientSecret: config.facebook.clientSecret,
        callbackURL: config.facebook.callbackURL
    }, function(accessToken, refreshToken, profile, done) {
        User.findOne({ 'facebook.id': profile.id }, function (err, user) {
            if (err) { return done(err); }
            if (!user) {
                user = new User({
                    name: profile.displayName,
                    email: profile.emails[0].value,
                    username: profile.username,
                    provider: 'facebook',
                    facebook: profile._json
                });
                user.save(function (err) {
                    if (err) {
                        console.log(err);
                    }
                    return done(err, user);
                });
            } else {
                return done(err, user);
            }
        });
    }));

我添加了以下路线:

app.get('/facebook/auth', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me', 'publish_actions']}), function(req, res) { });

// I need the following fix due to this: http://stackoverflow.com/a/17015836/289246
app.get('/facebook/auth/callback', function(req, res, next) {
        if (req.query && !req.query.error && req.query.error_code) {
            req.query.error = true;
        }
        next();
    },
    passport.authenticate('facebook', { failureRedirect: '/facebook-auth-failure', successRedirect: '/auth-success', failureFlash: true })
);

app.get('/facebook-auth-failure', users.authFailure);
app.get('/auth-success', users.authSuccess);

我的users.authFailure方法是:

exports.authFailure = function (req, res) {
    var error = ??? 
    // How can I get here the error message??
    res.render('auth-failure', {
        error: error || 'An error has accured'
    });
};

如果 facebook 身份验证失败,我如何获取错误消息(我想将其显示给用户)?

最佳答案

由于您使用的是 failureFlash,因此应该这样做:

var error = req.flash('error');

关于javascript - Passportjs 获取身份验证错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058496/

相关文章:

javascript - WooCommerce API 授权在 node.js 应用程序中不起作用

javascript - 使用 mongoose 保存嵌套对象(数组),在 mongodb 中结果为空对象

javascript - 如何将数据从 * .ejs 文件传输到 app.js 并处理 app.js 文件上的 HTML 标记上的单击事件

javascript - 对象 #<IncomingMessage> 没有方法 'post'

javascript - 如何让javascript在Galaxy S3上流畅运行?

javascript - 单击另一个表行时关闭上一个表行

javascript - $.ajax 在同一页面提交,表单仅在第一次有效

javascript - Angular 语法错误

node.js - 当将标准输入管道传输到子进程时,NodeJS 进程永远不会结束

Node.js javascript 操作?