1

Facebook認証にpassportjsを使用しています。これが私の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の認証失敗の場合、エラーメッセージを取得するにはどうすればよいですか(ユーザーに表示したい)?

4

3 に答える 3

0

Passport を使用しているときに、多くの問題、バグ、および構成の問題を経験しました。私の解決策は、Everyauth に移行することでした。

于 2013-06-13T06:43:36.610 に答える
0

これが役に立つかどうかはわかりませんが、この方法でフラッシュ メッセージにアクセスできました。FacebookStrategy を定義するときは、passReqToCallback パラメーターを使用します。

passport.use(new FacebookStrategy({
   clientID: facebook.getClientID(),
   clientSecret: facebook.getClientSecret(),
   callbackURL: facebook.getCallback(),
   passReqToCallback: true

これにより、 req.flash() をパラメーターとして done() に追加できます

return done(false, user, reg.flash('success', 'Sign in successfully'));

あなたや助けを求めている他の人の状況に光を当てることを願っています

于 2014-06-19T21:05:09.000 に答える
0

を使用しているのでfailureFlash、これでうまくいくはずです:

var error = req.flash('error');
于 2013-06-12T06:04:52.713 に答える