it-swarm.com.de

pass google oauth auf localhost

Ich bin ziemlich neu bei der Verwendung von Passport für die Authentifizierung über Knoten, daher die vielen Code-Snippets

mein Server ist wie folgt konfiguriert:

var router = require('./app/config/routes');
var googleStrategy = require('./app/config/passport');
var session = require("express-session");

var passport = require('passport');
app.use(session({secret : '<secret-key>'}));
app.use(passport.initialize());
app.use(passport.session());
googleStrategy(passport); 

meine Routen sind als konfiguriert 

module.exports = function(app, passport) {

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

    app.get('/auth/google/callback', function() {
        passport.authenticate('google', {
            successRedirect: '/profile',
            failureRedirect: '/fail'
        });
    });

    .... ALSO configured /profile and /fail
};

mein Pass ist als konfiguriert

passport.serializeUser(function(user, callback){
        console.log('serializing user.');
        callback(null, user);
    });

    passport.deserializeUser(function(user, callback){
       console.log('deserialize user.');
       callback(null, user);
    });

    var processRequest = function(token, refreshToken, profile, callback){
        process.nextTick(function(){
           console.log('id : '+ profile.id);
           console.log('name :'+ profile.displayName);
           console.log('email :' + profile.emails);
           console.log('token : '+ token);
        });
    };

    passport.use(new GoogleStrategy({
        clientID: 'client ID',
        clientSecret : 'client SECRET',
        callbackURL : 'http://127.0.0.1:8080/auth/google/callback',
        realm : 'http://127.0.0.1:8080'
    }, processRequest));

Problem: Beim Aufruf von /auth/google erhalte ich nie einen Bestätigungsbildschirm. Was soll ich mir anschauen?

Update:

das Ändern der Routen auf die unten gezeigte Konfiguration hat funktioniert. 

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

    app.get('/auth/google/callback', 
        passport.authenticate('google', {
            successRedirect: '/profile',
            failureRedirect: '/fail'
        })
    );
14

Derzeit wird das OAUTH2-Protokoll für die Authentifizierung und Authentifizierung von google.So gut unterstützt. So ist es besser, dasselbe zu verwenden. Hier ist googles Dokumentation darüber .Use 'passport-google-oauth' module. Hier ist die Implementierung. Dies sollte die App-Objektkonfiguration sein. Sehen Sie auch, dass das oauth2strategy-Objekt vom passport-google-oauth-Modul verwendet wird. Schauen Sie sich auch die Bereiche in der app.get-Routenregistrierung an. 

var googleStrategy = require('passport-google-oauth').OAuth2Strategy;
  app.configure(function() {

    app.set('views',  './views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.session({secret:'MySecret'}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static('./public'));
});

app.get('/auth/google', select.passport.authenticate('google',{scope: 'https://www.googleapis.com/auth/plus.me https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'}));

app.get('/auth/google/callback', function() {
    passport.authenticate('google', {
        successRedirect: '/profile',
        failureRedirect: '/fail'
    });
});
app.get('/logout', function (req, res) {
        req.logOut();
        res.redirect('/');
    });

Bevor Sie jedoch eine neue Strategie erstellen, gehen Sie zur googles Entwicklerkonsole und erhalten Sie die Client-ID und das Geheimnis. Hier sind die Schritte 

  1. gehe dieses link und erstelle ein Projekt, hier ist die Momentaufnahme desselben enter image description here
  2. geben Sie einen neuen Projektnamen und eine neue ID ein. Hier ist die Momentaufnahme enter image description here
  3. Es dauert ungefähr eine Minute, um Ihr neues Projekt zu erstellen. Sobald Ihr neues Projekt erstellt ist, werden Sie zur Anwendungskonfiguration Ihrer App weitergeleitet. Wählen Sie auf der umgeleiteten Seite APIS AND AUTH -> API's aus. Aktivieren Sie auf der API-Seite die GOogle + API, hier ist der Snapshot davon enter image description here
  4. dann gehen Sie zu Anmeldeinformationen (unter APIs), klicken Sie dann auf Neue Client-ID erstellen , und registrieren Sie die Domänen und den Rückruf für Ihre App (konfigurieren Sie die Domäne als localhost). Hier ist der Snapshot!enter image description here 5. Dann erhalten Sie Ihre neue ID und Ihr neues Geheimnis. Verwenden Sie sie, um die neue Strategie zu erstellen 

    passport.use(new googleStrategy({
        clientID: '<TheNewclientID>',
        clientSecret: '<The New Secret>',
    
        callbackURL: "http://locahost:8080/auth/google/callback"
    },
    function (accessToken, refreshToken, profile, done) {
        console.log(profile); //profile contains all the personal data returned 
        done(null, profile)
    }
    ));
    

6. jetzt serialisieren und deserialisieren 

passport.serializeUser(function(user, callback){
        console.log('serializing user.');
        callback(null, user.id);
    });

passport.deserializeUser(function(user, callback){
       console.log('deserialize user.');
       callback(null, user.id);
    });

führen Sie den Server aus und gehen Sie zu localhost: 8080/auth/google (verwenden Sie nicht 127.0.0.1:8080 anstelle von locahost). Dies sollte funktionieren. :)

[Weitere nützliche Links: Sehen Sie sich den ersten Kommentar von kvcrawford zum Repo des Moduls in this page An. Passport-google ist ein weiteres beliebtes Modul, das zur Anmeldung über Google verwendet wird , jetzt schon veraltet, hier ist der link in Bezug auf seine letzten Ausgaben.]

28
Karthic Rao

In den meisten Beispielen im Web wird der Routing-Code folgendermaßen ausgeführt:

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

Gemäß der Express Reference erhalten Callbacks der app.get-Methode drei Argumente: request, response und 'next'. Das heißt, die Authentifizierungsmethode im obigen Beispiel gibt ein Funktionsobjekt zurück, und es wird mit drei Argumenten ausgeführt: request, response und 'next'.

Wenn Sie sich also in der Rückruffunktion der app.get-Methode wie folgt authentifizieren möchten:

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

dann solltest du schreiben:

app.get('/auth/google', function(request, response, next) {
    passport.authenticate('google', {scope: ['profile', 'email']})(request, response, next);
});
7
Seiya Mizuno

Ich stimme dir zu @Seiya, aber ich würde eine Weiterleitung hinzufügen

app.get(
    "/auth/google/callback", 
    passport.authenticate('google'),
    (req, res) => {
      res.redirect('/whatever')
    }
);
0
Djamal Dagirov