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?
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'
})
);
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
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! 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.]
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);
});
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')
}
);