6

Korzystanie z: passport-google-oauth2.Passport & JWT & Google Strategy - Wyłącz sesję i res.send() po oddzwonieniu google

Chcę używać JWT z logowaniem Google - do tego potrzebuję disable session i jakoś przekazać model użytkownika z powrotem do klienta. Wszystkie przykłady używają wywołania zwrotnego google, które jest magically redirect to '/'.
W jaki sposób:
1. Wyłącz sesję podczas korzystania z paszportu google-oauth2.
2. res.send() użytkownik do klienta po uwierzytelnieniu google.

Zapraszam do sugerowania alternatyw, jeśli nie jestem we właściwym kierunku.

+0

Sprawdź to - wyjaśnia dość wyraźnie. https://cloud.google.com/nodejs/getting-started/authenticate-users –

+0

@MuliYulzary Dzięki, ale w podanym przykładzie jest nadmierne korzystanie z sesji, której staram się unikać. – chenop

Odpowiedz

4

udało się przezwyciężyć ten z pewnymi spostrzeżeniami: Sesja
1. Wyłącz w ekspresowym - wystarczy wyjąć middleware sesji

// app.use(session({secret: config.secret})) 

2. przy użyciu uwierzytelniania Google, co faktycznie się dzieje, że tam jest przekierowanie na stronę logowania do google i jeśli logowanie się powiedzie, przekieruje Cię z powrotem pod podany adres URL.

To właściwie oznacza, że ​​gdy google zadzwoni do twojego callbacka, nie możesz zrobić res.send (tokena, użytkownika) - po prostu nie działa (każdy może wyjaśnić dlaczego?). Więc jesteś zmuszony wykonać przekierowanie do klienta, wykonując res.redirect("/"). Jednak celem jest przekazanie tokena, aby można było wykonać także res.redirect("/?token=" + token).

app.get('/auth/google/callback', 
     passport.authenticate('google', { 
      //successRedirect: '/', 
      failureRedirect: '/' 
      , session: false 
     }), 
     function(req, res) { 
      var token = AuthService.encode(req.user); 
      res.redirect("/home?token=" + token); 
     }); 

Ale w jaki sposób klient uzyska jednostkę użytkownika? Możesz więc przekazać użytkownika w ten sam sposób, ale nie było to dla mnie odpowiednie (przekazanie całej jednostki użytkownika na liście parametrów ...). Zrobiłem więc, aby klient użył tokena i odzyskał użytkownika.

function handleNewToken(token) { 
     if (!token) 
      return; 

     localStorageService.set('token', token); 

     // Fetch activeUser 
     $http.get("/api/authenticate/" + token) 
      .then(function (result) { 
       setActiveUser(result.data); 
     }); 
    } 

Co oznacza kolejną prośbę o http - To sprawia, że ​​myślę, że być może nie udało mi się zdobyć idei tokena. Zapraszam do oświecenia mnie.

+0

czy masz jakieś rozwiązanie? Mam ten sam problem i nie mogę ustawić nagłówków po przekierowaniu zwrotnym Google. – lomboboo

+0

Sprawdź też [paszport-google-oauth-jwt] (https://www.npmjs.com/package/passport-google-oauth-jwt) bardzo przydatne, jeśli nie chcesz korzystać z sesji – Gagan

+0

A jeśli nie chcesz korzystać z sesji, użyj [passpor-jwt] (https://www.npmjs.com/package/passport-jwt) – Gagan