Autenticación de pasaportes utilizando la ID de correo electrónico de Google Apps.

Estoy tratando de pasaporte js con la aplicación de correo electrónico de Google ID. Soy capaz de autenticarme usando la ID de correo electrónico de gmail.com. Pero, ¿cómo puedo autenticarme si la identificación del correo electrónico es una identificación de la aplicación de google (google.com/a/companyname.com)?

Este es mi codigo

var express = require('express'); var app = express(); var passport = require('passport'); var GoogleStrategy = require('passport-google').Strategy; passport.use(new GoogleStrategy({ returnURL: 'http://10.3.0.52:3000/auth/google/return', realm: 'http://10.3.0.52:3000/' }, function(identifier, profile, done) { User.findOrCreate({ openId: identifier }, function(err, user) { done(err, user); }); } )); app.get('/auth/google', passport.authenticate('google')); app.get('/auth/google/return', passport.authenticate('google', { successRedirect: '/', failureRedirect: '/login' })); app.get('/', function(req, res){ res.writeHead(200); res.end("connected"); }); app.listen(process.env.PORT || 3000); 

A tu código le faltan algunas partes vitales:

 ... passport.use(...); // this you have // these are required as well. app.use(passport.initialize()); app.use(passport.session()); // please read docs for the following two calls passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); ... 

Con los implementados, puedo iniciar sesión usando mi dirección de Google App bien.

EDITAR: solo funciona con el Nodo 0.8, aunque el Nodo 0.10 da un error. Creo que usar el passport-google-oauth es una solución mejor de todos modos. Para eso, tienes que registrar tu aplicación en Google ( aquí ); después del registro, se le proporcionarán los códigos GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET que puede utilizar.

He creado un método que verifica si el dominio de correo electrónico es el que quiero autorizar:

 UserSchema.method('checkFordomain', function(value) { var parts = value.split('@'); return (parts[1] == 'companyname.com'); }); 

Este es el método que puse en el modelo del modelo de usuario, usando modelos de esquema de mongoose.

 if (!user.checkForMMdomain(profile.emails[0].value)) { return done(); } 

en la callback de la estrategia de Google para pasaportes https://github.com/jaredhanson/passport-google-oauth

En su callback de passport.use puede realizar una verificación adicional basada en el dominio de la dirección de correo electrónico principal (o lo que esté verificando):

 if (profile.emails[0].split('@')[1] !== authorizedDomain) { return done(null, false); }