2017-03-13 1 views
0

Ich möchte einen stateless Knoten api mit pass.js für die Authentifizierung schreiben.Passport.js statusless/sessionless google auth

Ich möchte einen OAuth Google API-Endpunkt erstellen, der den API-Schlüssel bei Erfolg und anderen Details zum Erfolg zurückgibt.

Google API Route

router.get('/',passport.authenticate('google', { scope : ['profile', 'email']})); 


router.get('/callback', function(req, res, next) { 
    passport.authenticate('google', { session: false, failureRedirect: '/#/login'}, function(err, user, info) { 
     console.log('------------------in google callback-----------------'); 
     if (err) res.status(500).json({status_code: 500, message: "Authentication error", data : err}); 

     if (!user) { 
      res.status(404).json({status_code: 404, message : "User not found/created"}); 
     } 
     var token = 'JWT KEY TO USE AS API TOKEN'; 
     res.status(200).json({status_code: 200, message : "Success", data : {token : token, user:user }}); 
    })(req, res, next); 

}); 

Wenn ich in Browser auf erfolgreiche Authentifizierung meinen api Endpunkt öffne die Json Antwort wird nur auf dem Bildschirm ausgegeben und ich habe keine Möglichkeit, das gleiche in einer Variablen zu erfassen. Der Aufruf desselben api-Endpunkts über Ajax funktioniert nicht.

This is how i recieve the json response

Wie erstelle ich einen api Endpunkt Google Login, die ohne Sitzungen funktioniert und gibt ein Token?

Wie kann ich dies über Ajax ausführen? Gibt es eine Möglichkeit, diesen API-Endpunkt aufzurufen und die Antwort in einem Erfolgsrückruf zu erhalten?

Antwort

0

Der Google-Authentifizierungsprozess muss im Client stattfinden (der Browser wird immer die neue Seite öffnen) und dann muss der Google-Server Ihren Server direkt kontaktieren (an Ihrem Rückrufendpunkt), andernfalls könnte der Client nur so tun, als ob er sie hätte wurden authentifiziert.

Wenn Sie also versuchen, dies in einer einzigen Anfrage an Ihren Server oder ohne einen Server zu tun, ist das nicht möglich.