【问题标题】:Sails.JS + sails-auth + passport-openidconnectSails.JS +sails-auth + 护照-openidconnect
【发布时间】:2016-04-21 17:06:24
【问题描述】:

我正在尝试在我的 Sails 应用中实施 passport-openidconnect。我已经安装了sails-auth、passport、passport-local、passport-http和passport-openidconnect,所有这些都是启动sails应用程序所必需的。 I copied the contents of this file 获取护照配置,因为当我开始实施时,sails 应用程序已经启动。到目前为止,这是我的配置文件:

module.exports.passport = {

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

};

我基于上面提到的config/passport.js 文件中的一些默认选项。

我已经搜索了 OpenID Connect 的设置示例,但到目前为止还没有找到任何东西。有没有人在他们自己的项目中实现了这一点并且可以给我一些指示?谢谢!

【问题讨论】:

    标签: sails.js passport.js openid-connect


    【解决方案1】:

    我已经在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));
    

    你需要配置你的路由(config/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);
    }
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 2017-02-28
      • 2015-07-15
      • 2015-07-03
      • 2014-05-01
      • 2017-08-03
      • 2015-09-16
      • 2016-10-19
      • 2014-12-09
      相关资源
      最近更新 更多