jpcn-coder
10/12/2018 - 3:40 PM

Passport JS google oauth

1. npm install --save passport

2. npm install --save passport passport-google-oauth20

3. cria um arquivo com as keys pegas em: https://console.developers.google.com

(keys.js)
module.exports =
{
    googleClientID = '1022234683095-d5mf224j8tuugsmm01roaoode7p0g390.apps.googleusercontent.com',
    googleClientSecret = '0t14R-T0hEmv-7QiNIzZTToP' 
};

4. 
(index.js)
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('./config/keys');


passport.use(new GoogleStrategy(
    {
        clientID: keys.googleClientID,
        clientSecret: keys.googleClientSecret,
        callbackURL: '/auth/google/callback'
    }, (accessToken,refreshToken,profile,done) =>
    {
        User.findOne({ googleId: profile.id}).then((existingUser) =>
        {
            if(existingUser)
            {
                //ja possui na base
                done(null,existingUser);
            }
            else{
                new User({googleId: profile.id}).save().then(user=> done(null,user));
            }
        });
        // console.log('acesstoken',accessToken);
        // console.log('refreshToken',refreshToken);
        // console.log('profile',profile);
    })
);


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


5. ao tentar entrar na pagina, receberá um erro com uma url do googe, tem que copiar ela, exemplo:
https://console.developers.google.com/apis/credentials/oauthclient/1022234683095-d5mf224j8tuugsmm01roaoode7p0g390.apps.googleusercontent.com?project=1022234683095

No projeto haverá a opção: uris de redirecionamento autorizado, tem que adicionar a url que escolheu no callbackURL, neste exemplo:
localhost:5000/auth/google/callback

quando der refresh na pagina de erro anterior, tem que abrir a janelinha do google


6. agora quando clicar no usuario pra logar com o goole, ele vai redirecionar para url de callback
entao tem de ter esse endereco

app.get('/auth/google/callback',passport.authenticate('google'));

7. precisa serealizar o usuario pra cookie e desializar qnd for dar logout

passport.serializeUser((user,done)=>{
    done(null,user.id);
});

passport.deserializeUser((id,done)=>{
    User.findById(id).then(user => {
        done(null,user);
    });
});

8. instalar nom cookie
npm install --save cookie-session

9. adicionar ao index.js 

const cookieSession = require('cookie-session');
const passport = require('passport');

app.use(
    cookieSession({
        maxAge: 30*24*60*60*1000,
        keys: [keys.cookieKey]
    })
);