2016-11-26 2 views
0

Ich versuche zu debuggen, wo in meinem Google OAuth2 Setup ist es nicht möglich, das OAuth-Anmeldefenster zum Anmelden mit meinen Anmeldeinformationen zu rendern. Trotz der Dokumentation scheint es, dass mein Code nicht richtig funktioniert, wenn passport.authorize('google', { scope : ['profile'] }) aufgerufen wird, da die Route ausgelöst wird und dann eine Endlosschleife hat, bis es mit einem Fehler GET http://localhost:3000/auth/google net::ERR_CONNECTION_REFUSED Timeout.Passportjs Google Authentifizierung schlägt fehl

Ich habe versucht, durch meine Pass-Setup zu sehen, aber nichts scheint zwischen den Codebeispielen in der Dokumentation und nicht sicher zu sein, wo der Fehler kommen würde, wie nichts in meinem Terminal für meine Konsolenprotokolle außerhalb von Google Auth triggered protokolliert wird Hier

ist die PassportJS Setup:

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var GoogleStrategy = require('passport-google-oauth20').Strategy; 
var models = require('../app/models/db-index'); 
var configAuth = require('./auth'); 
var bcrypt = require('bcrypt-nodejs'); 

/*==== Passport Configuration ====*/ 

// Serialize sessions 
passport.serializeUser(function(user, done) { 
    console.log("User ID: " + user.userId + " is serializing"); 
    done(null, user.userId); 
}); 

passport.deserializeUser(function(userId, done) { 
    models.User.find({ 
     where: { 
      userId: userId 
     } 
    }).then(function(user) { 
     console.log("User ID: " + user.userId + " is deserializing"); 
     done(null, user); 
    }).error(function(err) { 
     done(err, null); 
    }); 
}); 

/*==== Local Configuration ====*/ 

//Login logic 
passport.use('local', new LocalStrategy({ 
    passReqToCallback: true, 
    usernameField: 'email' 
}, function(req, email, password, done) { 
    //Find user by email 
    models.User.findOne({ 
     where: { 
      email: req.body.email 
     } 
    }).then(function(user) { 
     if (!user) { 
      done(null, false, { 
       message: 'The email you entered is incorrect' 
      }, console.log("Unknown User")); 
     } else if (!user.validPassword(password)) { 
      done(null, false, console.log("Incorrect Password")); 
     } else { 
      console.log("User match"); 
      done(null, user); 
     } 
    }).catch(function(err) { 
     console.log("Server Error"); 
     return done(null, false); 
    }); 
})); 

//Sign Up Logic 
passport.use('local-signup', new LocalStrategy({ 
    passReqToCallback: true, 
    usernameField: 'email' 
}, function(req, email, password, done) { 
    models.User.findOne({ 
     where: { 
      email: email 
     } 
    }).then(function(existingUser) { 
     if (existingUser) 
      return done(null, false, req.flash('error', 'Email already exists.')); 
     if (req.user && password === confirmPassword) { 
      var user = req.user; 
      user.firstName = firstName; 
      user.lastName = lastName; 
      user.email = email; 
      user.password = models.User.generateHash(password); 
      user.save().catch(function(err) { 
       throw err; 
      }).then(function() { 
       done(null, user, req.flash('error', 'All fields need to be filled in')); 
      }); 
     } else { 
      var newUser = models.User.build({ 
       firstName: req.body.firstName, 
       lastName: req.body.lastName, 
       email: req.body.email, 
       password: models.User.generateHash(password) 
      }); 

      newUser.save().then(function() { 
       done(null, newUser); 
      }).catch(function(err) { 
       done(null, false, console.log(err)); 
      }); 
     } 
    }).catch(function(e) { 
     done(null, false, req.flash('error', 'All fields need to be filled in'), console.log(e.email + e.message)); 
    }) 
})); 

/*==== Google Configuration ====*/ 

passport.use(new GoogleStrategy({ 
    clientID: 'client-id-hash.apps.googleusercontent.com', 
    clientSecret: 'secret-hash', 
    callbackURL: 'http://localhost:3000/auth/google/callback' 
    }, function(accessToken, refreshToken, profile, cb) { 
    console.log('First Google Config fired'); 
     models.ExternalAccount.findOrCreate({ 
      externalSourceId: profile.id 
     }).then(function(err, externalAccount){ 
      console.log('Sequelize Google query fired without issues'); 
      return cb(err, externalAccount) 
     }); 
    })); 

module.exports = passport; 

Hier sind meine Routen:

var express = require('express'); 
var siteRoutes = express.Router(); 
var path = require('path'); 
var passport = require(path.resolve(__dirname, '..', '..', './config/passport.js')); 

/*==== /AUTH/GOOGLE ====*/ 

siteRoutes.route('/auth/google') 
    .get(function(req, res){ 
     console.log('Google Auth triggered'); 
     passport.authorize('google', { scope : ['profile'] }) 
    }); 

/*==== /AUTH/GOOGLE/CALLBACK ====*/ 

siteRoutes.route('/auth/google/callback') 
    .get(function(req, res){ 
     passport.authorize('google', { 
      successRedirect : '/app', 
      failureRedirect : '/login', 
      failureFlash: 'Invalid Google credentials.' 
     }); 
    }); 

Antwort

1

Der Authentifizierungsaufruf ist selbst eine Middleware. Und soweit ich das aus der Dokumentation ersehen kann, gibt es keinen authorize Aufruf überhaupt. Ihre Rückruf-Route sollte daher in etwa so aussehen:

/*==== /AUTH/GOOGLE/CALLBACK ====*/ 

siteRoutes.route('/auth/google/callback') 
    .get(passport.authenticate('google', { 
      successRedirect : '/app', 
      failureRedirect : '/login', 
      failureFlash: 'Invalid Google credentials.' 
     })); 
+0

toller Fang! Diese Änderung sowie das Entfernen des Funktionsteils der Route behob das Problem. Vielen Dank! – cphill

Verwandte Themen