2017-09-01 1 views
0

Ich bin der Pass-Facebook-Plugin in einer NextJS App und mein Testskript definiert die Strategie, wie unten mit:Passport Facebook-Strategie liefert undefinierte Werte

// Configure Passport 
// --------------------------------------------------------------- 
passport.use(new LocalStrategy(User.authenticate())); 
passport.use(new FacebookStrategy({ 
    clientID: process.env.FACEBOOK_APP_ID, 
    clientSecret: process.env.FACEBOOK_APP_SECRET, 
    callbackURL: process.env.FACEBOOK_APP_CALLBACK, 
}, 
    function (accessToken, refreshToken, profile, done) { 
    console.log(profile); 
    } 
)); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 
// --------------------------------------------------------------- 

Meine Authentifizierungs Routen sind:

// Facebook 
router.get('/auth/facebook', passport.authenticate('facebook')); 
router.get('/facebook/callback', 
    passport.authenticate('facebook', { 
    successRedirect: '/success', 
    failureRedirect: '/failure', 
    }), 
); 

Alles, was ich vorerst versuche, ist, alle von Facebook zurückgegebenen Werte bei einer erfolgreichen Authentifizierung anzuzeigen. Die Authentifizierung funktioniert wie erwartet, aber Facebook scheint undefined für die meisten Schlüssel im profile Objekt zurückkehren:

{ id: '1234567812345677', 
    username: undefined, 
    displayName: 'John Doe', 
    name: 
    { familyName: undefined, 
    givenName: undefined, 
    middleName: undefined }, 
    gender: undefined, 
    profileUrl: undefined, 
    provider: 'facebook', 
    _raw: '{"name":"John Doe","id":"1234567812345677"}', 
    _json: { name: 'John Doe', id: '1234567812345677' } } 

Alles, was ich bekommen, ist die displayName und id; alles andere ist undefined. Was läuft falsch? Eine sehr ähnliche Frage wurde hier schon früher gestellt, aber keine der Antworten (keine akzeptierte Antwort) bot das Problem an.

+0

Komplette Schätzung - überprüfen Sie Ihre Anwendungsbereiche. Sie haben wahrscheinlich keine Berechtigung für vollständige Profilinformationen. –

+0

Ich habe keinen expliziten Geltungsbereich für meinen Authentifizierungsaufruf angegeben. Sollte etwas wie * Benutzername * nicht als Teil des Standardbereichs verfügbar sein? Alle Tutorials, auf die ich online gestoßen bin (einschließlich der PassportJS-Dokumentation), weisen Sie an, einen Bereich anzugeben, falls Sie zusätzlichen Zugriff benötigen, z. B. Zeitleiste usw. – TheLearner

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem:/ –

Antwort

0

Ich habe keine Erfahrung in diesem Bereich, aber aus dem Blick auf die readme von Facebook-Pass, es klingt, als ob Sie die profileFields in Ihrem FacebookStrategy verwenden müssen. :

The Facebook profile contains a lot of information about a user. By default, not all the fields in a profile are returned. The fields needed by an application can be indicated by setting the profileFields option.

new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://localhost:3000/auth/facebook/callback", 
    profileFields: ['id', 'displayName', 'photos', 'email'] 
}), ...) 

Refer to the User section of the Graph API Reference for the complete set of available fields.

+1

Leider würde das nicht funktionieren. Wirft einen Fehler: Fehler bei /home/ubuntu/nano/node_modules/passport-facebook/lib/strategy.js:165:21 bei passBackControl (/ home/ubuntu/Nano/node_modules/oauth/lib/oauth2. js: 132: 9) bei IncomingMessage. (/home/ubuntu/nano/node_modules/oauth/lib/oauth2.js:157:7) bei emitNone (events.js: 110: 20) bei IncomingMessage.emit (events.js: 207: 7) at endReadableNT (_stream_readable.js: 1047: 12) bei _combinedTickCallback (internal/process/next_tick.js: 102: 11) bei process._tickCallback (internal/process/next_tick.js: 161: 9) – TheLearner

Verwandte Themen