Passport-facebook FacebookTokenError:此授权码已被使用

时间:2015-12-01 14:56:16

标签: node.js facebook passport.js passport-facebook

这是我的passport.js

var FacebookStrategy = require('passport-facebook').Strategy;


var User = require('./app/models/users');
var config = require('./config');

module.exports = function (passport) {


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

    passport.deserializeUser(function (id, done) {
        User.findById(id, function (err, user) {
            done(err, user);
        });
    });



    passport.use(new FacebookStrategy({
            clientID: config.facebook.appId,
            clientSecret: config.facebook.appSecret,
            callbackURL: config.facebook.redirectUrl,
            profileFields: ['id', 'name', 'displayName', 'emails', 'photos']

        },
        function (accessToken, refreshToken, profile, done) {
            process.nextTick(function () {

                User.findOne({'facebook.id': profile.id}, function (err, user) {

                        console.log(profile);

                    if (err) {
                        // console.log("tick errr");
                        return done(err)
                    }
                    ;
                    if (user)
                        return done(null, user);
                    else {
                        var newUser = new User();
                        newUser.facebook.id = profile.id;
                        newUser.facebook.token = accessToken;
                        newUser.facebook.name = profile.displayName;
                        newUser.facebook.email = profile.emails[0].value;
                        newUser.facebook.picurl = profile.photos[0].value;
                        // console.log("access to ken is "+accessToken);
                        //console.log(newUser.facebook.id);

                        newUser.save(function (err) {
                            if (err)
                                console.log(err);
                            return done(null, newUser);
                        })
                    }
                });
                });
            // done(null, profile);
        }
    ));

api.js

 api.get('/auth/facebook', function (req, res, next) {

        passport.authenticate('facebook', {scope: ['email']})(req, res, next);
    });


    api.get('/auth/facebook/callback',

        passport.authenticate('facebook', {


            successRedirect: '#/home',
            failureRedirect: '#/login'


        })

    );


    };

我在使用Facebook登录时遇到问题。 我收到了以下错误:

FacebookTokenError: This authorization code has been used.
   at Strategy.parseErrorResponse (c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\lib\strategy.js:199:12)
   at Strategy.OAuth2Strategy._createOAuthError (c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:345:16)
   at c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:171:43
   at c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:177:18
   at passBackControl (c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:123:9)
   at IncomingMessage.<anonymous> (c:\Users\chetan kanjani\WebstormProjects\letsgo\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
   at IncomingMessage.emit (events.js:129:20)
   at _stream_readable.js:908:16
   at process._tickDomainCallback (node.js:381:11)

我能够在Facebook页面上登录,然后出现此错误。 我从facebook获取的详细信息仍然成功存储在我的数据库中; 我认为它与auth / facebook / callback

有关

users.js文件:

var UserSchema = mongoose.Schema({
    local: {

        name: String,
        username: {type: String, index: {unique: true}},
        password: {type: String, select: false}
    },
    facebook: {
        id: String,
        token: String,
        email: String,
        name: String,
        picurl: String,
    },
    favouriteid: [{eventid: String}]

});


UserSchema.pre('save', function(next) {

    var user = this;


    if (!user.isModified('local.password')) return next();

    bcrypt.hash(user.local.password, null, null, function (err, hash) {
        if(err) return next(err);

        user.local.password = hash;
        next();

    });
});

UserSchema.methods.comparePassword = function(password) {

    var user = this;

    var a = bcrypt.compareSync(password, user.local.password);

    if (a == true)
        return true;
    else {
        console.log('error in compare password');
        return false;
    }

}

1 个答案:

答案 0 :(得分:-1)

当离开的应用登录您的Facebook帐户中的数据时会发生此错误。 删除您的登录数据以解决此错误。

  1. 登录Facebook
  2. 转到设置
  3. 转到Apps
  4. 搜索您应用的登录数据。
  5. 按“X”按钮
  6. 按照上述进度后,尝试登录Facebook登录。