2017-04-03 5 views
0

Ich folgte dem folgenden Dokument und versucht zu installieren Google OAuth für meine NodeJS Anwendung: https://cloud.google.com/nodejs/getting-started/authenticate-usersKnoten JS Pass Google OAuth Nicht Authentifizieren

Mein oauth2.js Code ist wie folgt:

const express = require('express'); 
const passport = require('passport'); 
const GoogleStrategy = require('passport-google-oauth20').Strategy; 

function extractProfile (profile) { 
    let imageUrl = ''; 
    if (profile.photos && profile.photos.length) { 
     imageUrl = profile.photos[0].value; 
    } 
    return { 
     id: profile.id, 
     displayName: profile.displayName, 
     image: imageUrl 
    }; 
} 
passport.use(new GoogleStrategy({ 
    clientID: <CLIENT ID as string>, 
    clientSecret: <CLIENT SECRET as string>, 
    callbackURL: 'http://<APP DOMAIN>/auth/google/callback' 
}, (accessToken, refreshToken, profile, cb) => { 
    cb(null, extractProfile(profile)); 
})); 
passport.serializeUser((user, cb) => { 
    cb(null, user); 
}); 
passport.deserializeUser((obj, cb) => { 
    cb(null, obj); 
}); 
const router = express.Router(); 
function authRequired(req, res, next){ 
    if(!req.user){ 
     req.session.oauth2return = req.originalUrl; 
     return res.redirect('/auth/login'); 
    } 
    next(); 
} 
function addTemplateVariables(req, res, next){ 
    res.locals.profile = req.user; 
    res.locals.login = `/auth/login?return=${encodeURIComponent(req.originalUrl)}`; 
    res.locals.logout = `/auth/logout?return=${encodeURIComponent(req.originalUrl)}`; 
    next(); 
} 

router.get(
    '/auth/login', 
    (req, res, next) => { 
     if(req.query.return) { 
      req.session.oauth2return = req.query.return; 
     } 
     next(); 
    }, 
    passport.authenticate('google', {scope: ['email', 'profile']}) 
); 

router.get('/auth/google/callback', 
    passport.authenticate('google', { 
     successRedirect: '/index', 
     failureRedirect: '/' 
    }) 
); 

router.get('/auth/logout', (req, res)=>{ 
    req.logout(); 
    res.redirect('/'); 
}); 

module.exports = { 
    extractProfile: extractProfile, 
    router: router, 
    required: authRequired, 
    template: addTemplateVariables 
}; 

Und es scheint, wie alles andere funktioniert gut. Ich werde zum Google OAuth-Zustimmungsbildschirm weitergeleitet und nach der Anmeldung muss ich ALLOW (um Erlaubnis zu erteilen) auswählen. Wenn ich jedoch zu/auth/google/callback umgeleitet werde, authentifiziert der passport.authenticate('google' ... Teil nicht, und ich bekomme einen 404 Not Found-Fehler (kein Fehler kann nicht GET).

weiß, dass ich das Umleiten richtig funktioniert, denn wenn ich

router.get('/auth/google/callback', 
    function(req, res){ 
     res.redirect('/index'); 
    } 
); 

versuchen die App ohne Probleme umleitet.

Was soll ich versuchen? Ich nehme an, es hat etwas mit dem Token zu tun, aber ich habe keine Ahnung, was ich überprüfen/beheben soll.

Vielen Dank im Voraus.

Antwort

Verwandte Themen