用户认证库为node.js?

是否有任何现有的用于node.js的用户认证库? 特别是我正在寻找一些可以为用户进行密码验证的方法(使用自定义后端验证数据库),并将该用户与会话相关联。

在我写一个auth库之前,我想我会看看人们是否知道现有的库。 通过谷歌搜索找不到任何明显的东西。

-Shreyas


如果您正在寻找Connect或Express认证框架,Passport值得研究:https://github.com/jaredhanson/passport

(披露:我是Passport的开发者)

在调查connect-auth和everyauth后,我开发了Passport。 虽然它们都是很好的模块,但它们并不适合我的需求。 我想要的东西更轻量且不显眼。

护照分为单独的模块,因此您可以选择仅使用您需要的(仅在必要时使用OAuth)。 Passport在您的应用程序中也不会安装任何路由,使您可以灵活地决定何时何地进行身份验证,以及挂钩来控制身份验证成功或失败时发生的情况。

例如,以下是设置基于表单(用户名和密码)认证的两步过程:

passport.use(new LocalStrategy(
  function(username, password, done) {
    // Find the user from your DB (MongoDB, CouchDB, other...)
    User.findOne({ username: username, password: password }, function (err, user) {
      done(err, user);
    });
  }
));

app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    // Authentication successful. Redirect home.
    res.redirect('/');
  });

其他策略可通过Facebook,Twitter等进行身份验证。如果需要,可以插入自定义策略。


会话+如果

我猜你没有找到很多好的库的原因是使用库进行身份验证主要是工程设计。

你正在寻找的只是一个会话绑定:)会话:

if login and user == xxx and pwd == xxx 
   then store an authenticated=true into the session 
if logout destroy session

而已。


我不同意你的结论,认为connect-auth插件是要走的路。

我使用的也是连接,但我不使用connect-auth有两个原因:

  • 恕我直言打破连接认证非常强大和易于阅读洋葱环连接结构。 不要去 - 我的意见:)。 你可以在这里找到一篇关于连接如何工作和洋葱圈概念的非常好的短文章。

  • 如果你 - 写成 - 只想使用基本或http登录与数据库或文件。 Connect-auth太大了。 它更像OAuth 1.0,OAuth 2.0&Co等


  • 连接的一个非常简单的认证

    (它是完整的,只是执​​行它进行测试,但如果你想在生产中使用它,一定要使用https)(并且要成为REST-Principle-Compliant,你应该使用POST请求而不是GET-Request b / c你改变状态:)

    var connect = require('connect');
    var urlparser = require('url');
    
    var authCheck = function (req, res, next) {
        url = req.urlp = urlparser.parse(req.url, true);
    
        // ####
        // Logout
        if ( url.pathname == "/logout" ) {
          req.session.destroy();
        }
    
        // ####
        // Is User already validated?
        if (req.session && req.session.auth == true) {
          next(); // stop here and pass to the next onion ring of connect
          return;
        }
    
        // ########
        // Auth - Replace this example with your Database, Auth-File or other things
        // If Database, you need a Async callback...
        if ( url.pathname == "/login" && 
             url.query.name == "max" && 
             url.query.pwd == "herewego"  ) {
          req.session.auth = true;
          next();
          return;
        }
    
        // ####
        // This user is not authorized. Stop talking to him.
        res.writeHead(403);
        res.end('Sorry you are not authorized.nnFor a login use: /login?name=max&pwd=herewego');
        return;
    }
    
    var helloWorldContent = function (req, res, next) {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('authorized. Walk around :) or use /logout to leavennYou are currently at '+req.urlp.pathname);
    }
    
    var server = connect.createServer(
          connect.logger({ format: ':method :url' }),
          connect.cookieParser(),
          connect.session({ secret: 'foobar' }),
          connect.bodyParser(),
          authCheck,
          helloWorldContent
    );
    
    server.listen(3000);
    

    注意

    我在一年前写了这个声明,目前没有活动的节点项目。 因此,Express中可能存在API更改。 如果我应该改变任何内容,请添加评论。


    看起来连接中间件的connect-auth插件正是我所需要的:http://wiki.github.com/ciaranj/connect-auth/creating-a-form-b​​ased-strategy

    我使用express [http://expressjs.com],因此连接插件非常适合,因为express是从连接中分类的(ok - prototyped)

    链接地址: http://www.djcxy.com/p/3743.html

    上一篇: user authentication libraries for node.js?

    下一篇: Can you float to the right of a span?