2017-08-26 1 views
0

Ich benutze PassportJS und es ist Facebook-Strategie, Benutzer für meine Website zu authentifizieren.Handle abgewählte Werte von Facebook über PassportJS

Alles ist gut, wenn der Benutzer im Popup-Fenster von Facebook nichts deaktiviert.

Sagen Sie jedoch, der Benutzer wählt E-Mail ab, ich werde das nicht zurückbekommen, was offensichtlich in der Kontrolle des Benutzers liegt.

Meine Frage ist - wie leite ich sie auf "woanders" basierend auf den Daten, die ich versucht habe?

passport.use(new FacebookStrategy({ 
clientID: config.facebook.appID, 
clientSecret: config.facebook.appSecret, 
callbackURL: config.facebook.callbackURL, 
profileFields: ['displayName', 'picture.type(large)', 'emails', 'birthday', 'location']}, 
function(accessToken, refreshToken, profile, done){ 

    var newUser = new userModel({ 
     fullname : profile.displayName, 
     profilePic : profile.photos[0].value || '', 
     email  : profile.emails[0].value || '', 
     birthday : profile._json.birthday || '', 
     location : profile._json.location.name || '', 
    }); 

    newUser.save(function(err){ 
     done(null, newUser); 
    }); 
); 
} 

Ich kann natürlich, tun so etwas wie ein Prä-Prozessor, aber ich weiß nicht, was ich tun muss, wenn die Daten nicht gültig ist. Sagen Sie zum Beispiel "E-Mail" ist ein Muss. Wie werde ich dem Benutzer sagen: "Da Sie das obligatorische E-Mail-Feld nicht angegeben haben, füllen Sie es bitte aus", und dann bringe ich den Benutzer auf die Seite Profileinstellungen.

Meine Rückruf-URL auf der Facebook-App ist:

http://localhost:3000/auth/facebook/callback 

Und es ist NodeJS Route unter:

router.get('/auth/facebook/callback', passport.authenticate('facebook', { 
    successRedirect:'/wall', 
    failureRedirect:'/login' 
})); 

Jede Eingabe helfen.

Vielen Dank im Voraus.

Antwort

0

Ich denke hier wird der Benutzer das E-Mail-Feld nicht abwählen. Facebook stellt Ihnen alle von Ihnen angeforderten Benutzerdaten zur Verfügung. Aber wenn die Benutzer-E-Mail, die in Facebook bereitgestellt wird, nicht verifiziert ist, erhalten Sie diese Information email:profile.emails[0].value hier nicht, d. H. Das E-Mail-Feld ist leer. Wenn Sie denken, dass die E-Mail für Sie obligatorisch ist, dann schreiben Sie nach jeder erfolgreichen Anmeldung einfach den Code, um zu prüfen, ob das E-Mail-Feld leer ist/null oder nicht. Wenn es leer ist, erstellen Sie ein Formular, in dem Sie den Benutzer bitten können, einfach seine E-Mail-Adresse einzugeben. benutzte ich mongodb und der Pass-Code wird so sein,

var User = require('../models/user'); 
    passport.use(new FacebookStrategy({ 
     clientID: configAuth.facebookAuth.clientID, 
     clientSecret: configAuth.facebookAuth.clientSecret, 
     callbackURL: configAuth.facebookAuth.callbackURL, 
     profileFields: ['id', 'email', 'first_name', 'last_name'], 
     }, 
     function(token, refreshToken, profile, done) { 
     process.nextTick(function() { 
      User.findOne({ 'facebook.id': profile.id }, function(err, user) { 
      if (err) 
       return done(err); 
      if (user) { 
       return done(null, user); 
      } else { 
       var newUser = new User(); 
       newUser.facebook.id = profile.id; 
       newUser.facebook.token = token; 
       newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName; 
       if(profile.emails !=null) 
    { 
       newUser.facebook.email = (profile.emails[0].value || '').toLowerCase(); 
    } 
    else 
    { 
    //write your code here to use the form and request the email from the user and then add that email to your database. 
    } 
       newUser.save(function(err) { 
       if (err) 
        console.log(err); 
       return done(null, newUser); 
       }); 
      } 
      }); 
     }); 
     })); 

Nun, Sie brauchen nicht die NodeJS Route umleiten Erfolgs zu ändern und Fehlerweiterleitung.

+0

Genau. Meine Frage ist - wie leite ich den Benutzer auf die bestimmte Seite mit dem Formular um? Ich sehe nur successRedirect und failureRedirect. Danke –

+0

Ich habe meine Antwort bearbeitet, überprüfen Sie es. – Gousia

+0

Hallo Kumpel. Ich denke, ich war vielleicht nicht klar. Was ich oben sehe, ist, wie man überprüft, ob die Variablen bereitgestellt werden oder nicht. Ich sehe nicht, wie die Weiterleitung funktionieren wird. Ich habe die Daten über die gesamte Website überprüft, aber was ich nicht weiß, ist, wie ich den Benutzer basierend auf den bereitgestellten Daten zu bestimmten Seiten leiten kann. Ich hoffe, ich bin jetzt klar. Vielen Dank –