eto*_*leb 5 authentication node.js
我正在构建一个node.js并使用connect-auth进行用户/通过身份验证,而我想要做的是允许用户长时间登录.玩游戏并查看源代码似乎connect-auth依赖于连接会话来维护经过身份验证的状态,因此一旦会话cookie过期(默认4小时),用户就会被注销.
一种选择是fork connect-auth和refactor不依赖于req.session,但这是非平凡的.另一种选择是将会话cookie的默认年龄更改为非常高,但我希望我的会话对象能够在会话中死亡.
有人有什么建议吗?我忽略了现有的解决方案吗?
谢谢!
我不会使用/ fork Connect-Auth.这个连接插件打破了连接的洋葱圈思想/架构并使(IMHO)你的代码不可读/带来不必要的复杂性.
身份验证对于图书馆来说太简单了.(如果你谈论一个简单的用户登录)
我正在使用自编的auth.您可以在下面找到简化版本.它还取决于会话cookie,但可以很容易地用持久性cookie替换.
(它已经完成了.只需执行它进行测试)
var connect = require('connect');
var urlpaser = require('url');
var authCheck = function (req, res, next) {
url = req.urlp = urlpaser.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 simple if with you Database or File or Whatever...
// 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;
}
// ####
// User is not unauthorized. Stop talking to him.
res.writeHead(403);
res.end('Sorry you are unauthorized.\n\nFor 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 leave\n\nYou 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1725 次 |
| 最近记录: |