之前布署了C9,用着还不错。昨天OSChina推送了一条关于Theia的文章,才知道还有一个web端的vs code。心动之下就用DOCKER在服务器上布署了一下,界面和vs code一模一样。
遇到了其它问题
刚布署完Theia发现没有语法高亮,也没有代码提示。网上找了半天也没发现有相关问题,本来打算放弃使用了。今天莫名奇妙全都正常了,结果发现在浏览器的问题,用Google Chrome就可以正常使用,之前用UC浏览器就无法加载语法功能。
登录验证
官方的DOCKER是没有登录验证的,直接打开网页就是干。想要布署在外网怎么也得加个登录才行,在DOCKER上有人放了加入简单登录验证的镜像,奈何是full版本,太大,而且版本也很久没有更新了。不过这位作者提供了登录验证的代码来源–官方github上的Issue。
将下面的代码替换server.js里的start函数,然后重起DOCKER
function start(port, host, argv) {
if (argv === undefined) {
argv = process.argv;
}
const cliManager = container.get(CliManager);
return cliManager.initializeCli(argv).then(function() {
const application = container.get(BackendApplication);
application.use((req, res, next) => {
// -----------------------------------------------------------------------
// authentication middleware
const auth = { login: 'name', password: 'pass' } // change this
// parse login and password from headers
const b64auth = (req.headers.authorization || '').split(' ')[1] || ''
const [login, password] = new Buffer(b64auth, 'base64').toString().split(':')
// Verify login and password are set and correct
if (!login || !password || login !== auth.login || password !== auth.password) {
res.set('WWW-Authenticate', 'Basic realm="401"') // change this
res.status(401).send('Authentication required.') // custom message
return
}
// -----------------------------------------------------------------------
// Access granted...
next()
});
application.use(express.static(path.join(__dirname, '../../lib'), {
index: 'index.html'
}));
return application.start(port, host);
});
}
之所以想用Theia是因为它较C9集成了Git,很好用。
给PHP加同样的验证
虽然不安全,但是对一些不重要又不想全安公开的东西,这是一个最快速的添加验证的方法吧,下面是网上找来的PHP版的代码
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
}else{
echo $_SERVER['PHP_AUTH_USER'];
echo $_SERVER['PHP_AUTH_PW'];
die();
}
转载请注明:HANLEI'BLOG » 给Theia IDE添加简单的登录验证