1

Donc j'essaie d'ajouter l'authentification facebook à mon application ionic2 en utilisant express et passportjs. J'ai presque réussi à travailler, sauf la dernière partie de rediriger l'utilisateur vers l'application ionic2 après autorisation. mes deux applications fonctionnent sur différents ports; ionic2 courir sur http://localhost:8100 et application express pour des trucs backend fonctionnant sur http://localhost:8000facebook-authentification passeport en utilisant ionic2 et l'application express

Ce sont les étapes que je suivais:

  1. app Créé le developers.facebook.com et obtenu l'ID App et ID secret.
  2. Sous Produits> Facebook> Paramètres, j'ai ajouté url callBack comme

enter image description here

  1. Puis dans mon application expresse qui est en cours d'exécution sur localhost: 8000, J'ai ajouté facebook stratégie d'authentification comme le montre https://github.com/jaredhanson/passport-facebook qui est quelque chose comme ceci:

    passport.use(new FacebookStrategy({ 
        clientID: FACEBOOK_APP_ID, 
        clientSecret: FACEBOOK_APP_SECRET, 
        callbackURL: "http://localhost:8000/auth/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
        User.findOrCreate({ facebookId: profile.id }, function (err, user) { 
         return cb(err, user); 
        }); 
    } 
    )); 
    
    app.get('/auth/facebook', 
    passport.authenticate('facebook')); 
    
    app.get('/auth/facebook/callback', 
        passport.authenticate('facebook', { failureRedirect: '/login' }), 
        function(req, res) { 
        // Successful authentication, redirect home. 
        res.redirect('/');  //how to redirect back to ionic app instead of/
    }); 
    

    maintenant à chaque fois que l'utilisateur clique sur le bouton facebook sur ionic2 application il va à la page d'authentification facebook et une fois authentifié avec succès, il redirige vers localhost: 8000/auth/facebook/callback comme prévu, mais je veux rediriger vers l'application ionique. Comment puis-je résoudre ce problème? Besoin de conseils pour résoudre ce problème.

Répondre

0

Je ne sais pas si c'est ce dont vous avez besoin, mais j'ai été en mesure d'ouvrir une nouvelle fenêtre qui gère l'authentification facebook. Cela a été fait dans mon fournisseur ci-dessous: Mon successRedirect ressemble à ceci:

public loginWithFacebook(callback : (data : any) => any){ 
    this.callback = callback; 
    this.childWindow = this.nativeWindow.open(this.authEndpoint); 
    this.closeTimer = setInterval(() => { 
     if (this.childWindow.closed){ 
     clearInterval(this.closeTimer); 
     this.childWindow = null; 
     this.closeTimer = null; 
     var passedJson = this.http.get(this.checkEndpoint).map(res => res.json()); 
     passedJson.subscribe(data => { 
      this.callback(data); 
     }); 
     } 
    }, 500); 
    } 

Ce vérifie si la fenêtre est fermée. Le problème est que je dois le fermer automatiquement. J'ai simplement fait une page html que la redirection de succès rend qui ferme la nouvelle fenêtre créée. Voici mon successRedirect

router.get('/api/auth/facebook/success', function (req, res) { 
    res.render('after-auth'); 
}); 

Assurez-vous que votre application expresse que vous avez votre moteur de vue mis en place dans votre app.js.

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'html'); 

Vos vues/après-auth.html devrait ressembler à ceci

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <script type="text/javascript"> 
     window.close(); 
    </script> 
</body> 
</html> 

Cette ferme maintenant la nouvelle fenêtre. Le seul problème que j'ai encore est que la session ne semble pas enregistrer quand j'essaye de faire le prochain appel. req.user semble être undefined pour moi