繁体   English   中英

使用passport.js与yeoman和grunt进行身份验证

[英]Using passport.js with yeoman and grunt for authentication

我正在尝试研究如何使用带有grunt / yeoman的passport.js。 我有以下内容:

// at the top of my gruntfile.js
var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;

passport.use(new BasicStrategy(
  function(username, password, done) {
    return done(null, true); // I would expect this to always succeed, but still challenge for credentials
  }
));

// further down in my connect config.
livereload: {
    options: {
        middleware: function (connect) {
            return [
                lrSnippet,
                passport.initialize(),
                passport.authenticate('basic', { session: false }),
                mountFolder(connect, '.tmp'),
                mountFolder(connect, yeomanConfig.app)
            ];
        }
    }
}

在每次请求时,响应都包含unauthorized 删除对passport.authenticate的调用会使页面正常工作,但显然现在没有身份验证。 我已经尝试过改变中间件的顺序而且没有帮助,而且我无法与yeoman / grunt的专家接近,所以我不完全确定还有什么可以尝试...

任何帮助将不胜感激。

我在想你需要在BasicStrategy回调BasicStrategy一个对象传递给done() 我记得,护照JS使用这个对象来填充快递应用程序中的req.user,因此我认为它可能期望一个object不是boolean

这是我在许多应用程序中使用的相同功能的更强大的示例:

  passport.use(new BasicStrategy(
    function(clientID, clientSecret, done) {
      AuthClient.findOne({ clientID: clientID }, function(err, client) {
        if (err) { return done(err); }
        if (!client) { return done(null, false); }
        if (client.secret != clientSecret) { return done(null, false); }
        return done(null, client);
      });
    }
  ));

正如您所看到的,BasicStrategy用于分析客户端ID和clientSecret,它相当于您的用户名/密码组合。 因为你实际上并没有像我的例子中所示那样从数据库中提取它,我希望如果你只是按照上面的建议并将{}传递给done(null, {}) ,它可能会更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM