具有NodeJS身份验证解决方案的CouchDB

时间:2014-08-15 02:09:32

标签: node.js cookies

在node.js中,我的auth库(lockit)在成功登录后没有设置会话。 (免责声明:我并不宽容使用lockit,我认为它在各方面都非常糟糕。)

我读了lockit源代码并找到了这段代码:

    // create session and save the name and email address
    req.session.name = user.name;
    req.session.email = user.email;

这是我的快速配置:

 app.use(bodyParser.urlencoded({extended: true}));
  app.use(bodyParser.json());
  app.use(cookieParser());
  app.use(cookieSession({
    secret: 'this is my super secret string'
  }));
  app.use(lockit.router);

在我与用户登录后,我使用相同的浏览器发送另一个请求,并且cookie与登录请求中设置的cookie相同...
成功登录后,我得到了Set-Cookies:

Set-Cookie  express:sess=eyJmYWlsZWRMb2dpbkF0dGVtcHRzIjowLCJuYW1lIjoianVzdGluIiwiZW1haWwiOiJqdXN0aW5Ad2ViaW52ZXJ0ZXJzLmNvbSIsImxvZ2dlZEluIjp0cnVlfQ==; path=/; httponly

Set-Cookie  express:sess.sig=FMcv9fswWmWG6A7hpOEnEysbqd4; path=/; httponly

然后登录后我的请求包含这些cookie:

express:sess    eyJmYWlsZWRMb2dpbkF0dGVtcHRzIjowLCJuYW1lIjoianVzdGluIiwiZW1haWwiOiJqdXN0aW5Ad2ViaW52ZXJ0ZXJzLmNvbSIsImxvZ2dlZEluIjp0cnVlfQ==

express:sess.sig    FMcv9fswWmWG6A7hpOEnEysbqd4

但即使饼干在那里,我也会: req.session === undefined

我以前从未使用过这些技术,所以它可能是我真正做的蠢事......

2 个答案:

答案 0 :(得分:1)

我是Lockit的作者,我相信我们会找到解决问题的方法。您是否完成了安装Lockit所需的所有步骤?这就是我刚刚做的,它运作良好。

  1. 创建一个新的Express应用程序(在我的情况下为Express 4.2.0)。

    express
    
  2. 安装Express依赖项。

    npm install
    
  3. 安装Lockit和Sessions。

    npm install lockit cookie-session --save
    
  4. 安装CouchDB适配器。

    npm install lockit-couchdb-adapter --save
    
  5. 使用CouchDB的网址

    创建config.js
    // settings for local CouchDB
    exports.db = 'http://127.0.0.1:5984/';
    
  6. 使用您的配置启动Lockit。

    // in your header
    var cookieSession = require('cookie-session');
    var Lockit = require('lockit');
    var config = require('./config.js');
    var lockit = new Lockit(config);
    
    // after all your other middleware
    app.use(cookieSession({
      secret: 'my super secret String'
    }));
    app.use(lockit.router);
    
  7. 启动您的应用。

    DEBUG=tmp ./bin/www
    
  8. 您现在可以导航到http://localhost:3000/signup并创建新用户。如果您尚未设置任何电子邮件服务器,则必须查看数据库(在我的情况下为http://127.0.0.1:5984/_utils/database.html?_users)以获取您的注册令牌。然后转到http://localhost:3000/signup/:token以激活新用户。

    很好,您现在可以使用您的用户名(或电子邮件)和密码登录。要使用req.session访问您自己路线中当前登录的用户。

    // default routes from Express
    app.use('/', routes);
    app.use('/users', users);
    
    // your own custom route
    app.get('/awesome', function(req, res) {
      console.log(req.session.name);
      console.log(req.session.email);
      res.send('awesome');
    });
    

    我希望我能帮助你。如果您有任何其他问题,请告诉我。

答案 1 :(得分:0)

http://localhost:3000/signup/:token不起作用,必须如此 http://localhost:3000/signup/token(没有专栏)