2017-08-26 4 views
0

J'utilise PassportJS et c'est Facebook-Stratégie pour authentifier les utilisateurs de mon site.Gérer les valeurs désélectionnées de Facebook via PassportJS

Tout va bien lorsque l'utilisateur ne désélectionne rien dans le pop-up Facebook.

Toutefois, si l'utilisateur désélectionne l'e-mail, je ne le récupérerai pas, ce qui est évidemment du ressort de l'utilisateur.

Ma question est - comment puis-je les diriger vers "ailleurs" en fonction des données que j'ai retentées?

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); 
    }); 
); 
} 

je peux, bien sûr, faire une sorte de préprocesseur, mais je ne sais pas ce que je dois faire si les données ne sont pas valides. Par exemple, dites "E-mail" est un must. Comment vais-je dire à l'utilisateur: "Comme vous n'avez pas fourni le champ obligatoire du courrier électronique, remplissez-le", puis j'emmène l'utilisateur sur une page Paramètres du profil.

Mon URL de rappel sur l'application Facebook est:

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

Et c'est la route NodeJS ci-dessous:

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

Toute entrée vous aidera.

Merci d'avance.

Répondre

0

Je pense que l'utilisateur ne désélectionnera pas le champ email. Facebook vous fournira toutes les données utilisateur que vous avez demandées. Mais si l'email de l'utilisateur fourni dans le facebook n'est pas vérifié, alors vous ne recevrez pas cette information email:profile.emails[0].value ici, c'est-à-dire, le champ email sera vide. Si vous pensez que l'e-mail est obligatoire pour vous, alors après chaque connexion réussie, écrivez simplement le code pour vérifier si le champ email est vide/null ou non. Si elle est vide, vous créez un formulaire dans lequel vous pouvez demander à l'utilisateur d'entrer son adresse e-mail. Je utilisé MongoDB et le code de passeport sera comme celui-ci,

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); 
       }); 
      } 
      }); 
     }); 
     })); 

Maintenant, vous n'avez pas besoin de changer la route nodejs de succès et redirect redirect échec.

+0

Exactement. Ma question est - comment puis-je "rediriger" l'utilisateur vers cette page avec le formulaire? Je vois seulement successRedirect et failureRedirect. Merci –

+0

J'ai édité ma réponse, vérifiez-la. – Gousia

+0

Salut mec. Je pense que je n'ai peut-être pas été clair. Ce que je vois ci-dessus est comment vérifier si les variables sont fournies ou non. Je ne vois pas comment la redirection va fonctionner. J'ai effectué la validation des données sur tout le site mais ce que je ne sais pas, c'est comment je peux acheminer l'utilisateur vers certaines pages en fonction des données fournies. J'espère que je suis clair maintenant. Merci –