Я создаю спокойный сервер с аутентификацией на Facebook. Мой сервер ожидает токен доступа, предоставленный веб-клиентом или мобильным клиентом, с таким запросом:
router.route('/auth/facebook').post(passport.authenticate('facebook-token',{
scope: ['publish_actions', 'manage_pages', 'user_about_me', 'user_photos', 'user_feed'] } ,{session: false}), function(req, res, next) {
if (!req.user) {
return res.send(401, 'User Not Authenticated');
}
user = new User({});
var token = jwt.sign(user.toObject(), config.secret);
return res.json({success: true, token: 'JWT ' + token}); });
Конфигурация моего паспорта:
passport.use(new FacebookTokenStrategy({
clientID: 'MY CLIENT ID',
clientSecret: 'MY CLIENT SECRET'
},
function (accessToken, refreshToken, profile, done) {
User.upsertFbUser(accessToken, refreshToken, profile, function(err, user) {
return done(err, user);
});
}));
Моя модель пользователя:
UserSchema.statics.upsertFbUser = function(accessToken, refreshToken, profile, cb) {
var that = this;
return this.findOne({
'facebookProvider.id': profile.id
}, function(err, user) {
// no user was found, lets create a new one
if (!user) {
var newUser = new that({
username: profile.emails[0].value,
facebook: {
id: profile.id,
token: accessToken
}
});
newUser.save(function(error, savedUser) {
if (error) {
console.log(error);
}
return cb(error, savedUser);
});
} else {
return cb(err, user);
}
});
};
схема:
var UserSchema = new Schema({
name: String,
username: { type: String, unique: true },
roles: [{ type: 'String' }],
isVerified: { type: Boolean, default: false },
password: String,
passwordResetToken: String,
passwordResetExpires: Date,
facebook: {
id: String,
token: String,
email: String,
name: String,
widgets: { type: Array, required: false},
select: false,
token: String,
},
google : {
id : String,
token : String,
email : String,
name : String
},
spotify : false
});
И я получил эту ошибку при тестировании с почтальоном с токеном accces, предоставленным в заголовке:
TypeError: обратный вызов не является функцией на FacebookTokenStrategy.strategy.success (/Users/***/Epitech/AppDev/DEV_area_2019/server_api/node-rest-auth/node_modules/passport/lib/middleware/authenticate.js:219:18) проверено (/ Пользователи / ***** / Epitech / AppDev / DEV_area_2019 / server_api / node-rest-auth / node_modules / passport-facebook-token / lib / index. js: 102: 25) в / Users / **** /Epitech/AppDev/DEV_area_2019/server_api/node-rest-auth/config/passport.js:34:14
РЕДАКТИРОВАТЬ:
Это работает, когда я удалите авторизацию Scope:
scope: ['publish_actions', 'manage_pages', 'user_about_me', 'user_photos', 'user_feed']
Есть ли у вас идеи, почему он это делает? Должен ли веб-клиент поставить эту авторизацию на свою сторону? ***
Спасибо:)