Autenticación con Google usando OpenID Connect
Clase 32 de 39 • Curso de Autenticación con Passport.js 2019
En el curso vimos como se podia implementar Google Authentication usando la estrategia de OAuth directamente. En esta lectura vamos a explorar como hacer la autenticación usando la estrategia directa de Google.
Lo primero es instalar nuestras dependencias
npm install passport-google-oauth
Luego creamos una nueva estrategia llamada google
dentro de utils/auth/strategies/google.js
:
const passport = require("passport"); const { OAuth2Strategy: GoogleStrategy } = require("passport-google-oauth"); const { config } = require("../../../config/index"); passport.use( new GoogleStrategy( { clientID: config.googleClientId, clientSecret: config.googleClientSecret, callbackURL: "/auth/google/callback" }, function(accessToken, refreshToken, profile, cb) { const { data, status } = await axios({ url: `${config.apiUrl}/api/auth/sign-provider`, method: "post", data: { name: profile.name, email: profile.email, password: profile.id, apiKeyToken: config.apiKeyToken } }); if (!data || status !== 200) { return cb(boom.unauthorized(), false); } return cb(null, data); } ) );
Teniendo nuestra estrategia de Google ya podemos agregar las dos nuevas rutas de autenticación.
app.get( "/auth/google", passport.authenticate("google", { scope: ["email", "profile", "openid"] }) ); app.get( "/auth/google/callback", passport.authenticate("google", { session: false }), function(req, res, next) { if (!req.user) { next(boom.unauthorized()); } const { token, ...user } = req.user; res.cookie("token", token, { httpOnly: !config.dev, secure: !config.dev }); res.status(200).json(user); } );
Con esto tenemos nuestra implementación de autenticación con Google pero mucho más sencilla.