Стратегия Facebook с сапером и полькой - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно установить соединение с полькой (не Express) и использовать стратегию passport-facebook. На моем сервере js:

var app = polka();
passport.serializeUser(function(user, cb){
    return cb(null, profile);
});

passport.deserializeUser(function(obj, cb){
    return cb(null, obj);
});

passport.use(new Strategy({
    clientID: *****,
    clientSecret: '******',
    callbackURL: 'http://localhost:3000/login/facebook/callback',
    //campo opzionale, specifico gli oggetti del profilo che voglio tornato
    profile: ['id', 'displayName']
  },
  function(accessToken, refreshToken, profile, done) {
    //Check the DB to find a User with the profile.id
    User.findOne({ uid: profile.id }, function(err, user) {
      if(err) {
        console.log(err);  // handle errors!
      }
      if (user) {
        console.log("find user!", user);
        done(null, user); //Login if User already exists
      } else { //else create a new User
        user = new User({
          uid: profile.id, //pass in the id and displayName params from Facebook
          name: profile.displayName
        });
        user.save(function(err) { //Save User if there are no errors else redirect to login.
          if(err) {
            console.log(err);  // handle errors!
          } else {
            console.log("saving user ...");
            done(null, user);
            console.log("user", user);
          }
        });
      }
    });
  }
));

app 
    //va sempre messo prima di passport.session
    .use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }))
    .use(passport.initialize())
    .use(passport.session())

    //definisco le rotte

    //rotta di login
    .get('/login/facebook',
        passport.authenticate('facebook')
    )

    //callback

    .get('/login/facebook/callback',

        //da confermare se è supportato il fialureRedirect
        //passport.authenticate('facebook', {failureRedirect: '/'}),
        passport.authenticate('facebook', {failureRedirect: '/'}),
        function(req, res){
            res.writeHead(302, {
                'Location': '/admin/menu',
                'content-type': 'document'
            });
            res.end();
        }
    )

    .use(
        compression({ threshold: 0 }),
        sirv('static', { dev }),
        formData.parse(options),
        formData.format(),
        //formData.stream(),
        formData.union(),
        json(),
        sapper.middleware()
    )

Когда я делаю вход в систему, консоль также показывает, что я уже вошла в систему (она также создала объект на mongodbclient, и он также найден), но проблема это то, что перенаправить меня на какой-то URL с

http://localhost:3000/login/facebook/callback?code=AQBBJIV61HxahPCtWBgMR23OMpU8MXfxDcD3BeRDTUw2rK5FvTnXq5n... 

с сообщением «профиль не определен»

и на консоли у меня есть это в ожидании

1 Ответ

1 голос
/ 05 мая 2020

В serializeUser вы возвращаете профиль, который никогда не объявляется, вы должны использовать:

passport.serializeUser(function(user, cb){
   return cb(null, user);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...