2016-04-21 65 views
1

我試圖將passport-openidconnect實現到我的Sails應用中。我已經安裝了sails-auth,passport,passport-local,passport-httppassport-openidconnect,所有這些都需要啓動sails應用程序。 I copied the contents of this file獲得護照配置,因爲當我開始實施時,sails應用已經啓動。這是迄今爲止我的配置文件:Sails.JS + sails-auth +護照-openidconnect

module.exports.passport = { 

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

}; 

我這個基礎了一些的,共有在上述config/passport.js文件的默認選項。

我已經搜索了OpenID Connect的設置示例,但目前還找不到任何東西。有沒有人在他們自己的項目中實現了這一點,並可以給我一些指示?謝謝!

回答

0

我已經在sails中實施了護照,有護照本地,Google/FB/Twitter的護照,但沒有sails-auth!

我不知道passport-openID,但這應該幾乎相同。

首先,你需要在你的config/http.js添加護照中間件像this

然後,你必須在config/passport.js(爲例來創建不同的策略與FacebookStrategy,它應該

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)); 

你需要配置路由(配置/ routes.js):

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

然後在你的控制器:

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); 
} 

希望有幫助!