2016-04-21 15 views
1

Ich versuche, Pass-Openidconnect in meine Sails App zu implementieren. Ich habe sails-auth, passport, passport-local, passport-http und passport-openidconnect installiert, die alle benötigt werden, um die Segel App zu starten. I copied the contents of this file um eine Passport-Konfiguration zu erhalten, da die Segel-App bereits gestartet wurde, als ich mit der Implementierung begann. Dies ist meine Config-Datei so weit:Sails.JS + sails-auth + pass-openidconnect

module.exports.passport = { 

    openid_connect: { 
     name: 'OpenID Connect', 
     protocol: 'oauth2', 
     strategy: require('passport-openidconnect').OAuth2Strategy, 
     options: { 
      clientID: '', 
      clientSecret: '' 
     } 
    } 

}; 

I basiert dies einige der Standardoptionen aus, die in der Datei config/passport.js oben erwähnt wurden.

Ich habe nach Setup-Beispielen für die OpenID Connect gesucht, konnte aber bisher nichts finden. Hat jemand das in ihrem eigenen Projekt implementiert und könnte mir einige Hinweise geben? Vielen Dank!

Antwort

0

Ich habe Pass in Segeln implementiert, mit Pass-local, Reisepass für Google/FB/Twitter, aber ohne Segel-auth!

Ich weiß nicht Pass-OpenID, aber das sollte fast das Gleiche sein.

Zuerst müssen Sie Pass-Middleware wie this in Ihre config/http.js

Dann hinzufügen müssen Sie mit FacebookStrategy die andere Strategie in config/passport.js (exemple zu schaffen, sollte es

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy 
    , FacebookStrategy = require('passport-facebook').Strategy 

var verifyExtHandler = function (token, tokenSecret, profile, done) { 
    checkAuthExt(profile, done); 
}; 

var verifyHandler = function (mail, password, done) { 

    checkAuth(mail, password, done); 

}; 

// Passport session setup. 
// To support persistent login sessions, Passport needs to be able to 
// serialize users into and deserialize users out of the session. Typically, 
// this will be as simple as storing the user ID when serializing, and finding 
// the user by ID when deserializing. 
passport.serializeUser(function (user, done) { 
    user.password = null; 
    done(null, user); 
}); 

passport.deserializeUser(function (user, done) { 
    done(null, user); 
}); 

// Use the LocalStrategy within Passport. 
// Strategies in passport require a `verify` function, which accept 
// credentials (in this case, a username and password), and invoke a callback 
// with a user object. 
passport.use(new LocalStrategy({ 
    usernameField: 'mail', 
    passwordField: 'password' 
}, verifyHandler)); 

// Remplacer les 'XXXXX' par vos clés et 'yourhost.com' par votre nom de domaine 
passport.use(new FacebookStrategy({ 
    clientID: "XXXXXX", 
    clientSecret: "XXXXXX", 
    callbackURL: "http://yourhost.com/auth/facebook" 
}, verifyExtHandler)); 

Und Sie benötigen, um Ihre Routen (config/routes.js) zu konfigurieren:

'/auth/facebook': 'AuthController.facebook', 
'/auth/facebook/callback': 'AuthController.facebook' 

Dann in Ihrem Controller:

facebook: function (req, res) { 
    passport.authenticate('facebook', { 
     failureRedirect: '/auth/login' 
    }, function (err, user) { 
     if (err) { 
      return console.log(err); 
     } 
     req.logIn(user, function (err) { 
      if (err) { 
       console.log(err); 
       res.serverError(); 
       return; 
      } 

      return res.redirect('/'); 
     }); 
    })(req, res); 
} 

Hoffe, dass hilft!