在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
我以前从未使用过这些技术,所以它可能是我真正做的蠢事......
答案 0 :(得分:1)
我是Lockit的作者,我相信我们会找到解决问题的方法。您是否完成了安装Lockit所需的所有步骤?这就是我刚刚做的,它运作良好。
创建一个新的Express应用程序(在我的情况下为Express 4.2.0)。
express
安装Express依赖项。
npm install
安装Lockit和Sessions。
npm install lockit cookie-session --save
安装CouchDB适配器。
npm install lockit-couchdb-adapter --save
使用CouchDB的网址
创建config.js
// settings for local CouchDB
exports.db = 'http://127.0.0.1:5984/';
使用您的配置启动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);
启动您的应用。
DEBUG=tmp ./bin/www
您现在可以导航到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)