我试图制作一套工具来访问我的数据库。大多数都与我的webapps访问数据有关,但我还需要一个我的快速网站页面,其中包含一个密码,供网站所有者提供编辑数据库的在线工具;所有其他路线不需要验证。
使用快递3,basic-auth
可以轻松添加这样的密码,但其功能已经通过Express 4中的中间件减少,并且大多数在线教程已经过时。新版basic-auth
将处理身份验证标题信息,但如何在浏览器中触发登录弹出窗口?
下面的代码只是样板文件,因此欢迎世界上最简单的登录提示。
express = require('express')
app = express()
auth = require 'basic-auth'
port = Number(process.env.PORT || 9778);
app.listen port, () ->
console.log "Listening on port: " + port
app.use '/editor', (req, res) ->
user = auth req
if (user == "....") ...
console.log user
app.get '/editor', (req, res) ->
# if authenticated send 'editor.html' else....
res.send 401, "Need password"
目前我正在添加身份验证以访问页面,然后允许该页面发布到CRUD节点。我想我应该转移到适当的REST API并要求在CUD上进行身份验证?
答案 0 :(得分:2)
根据Basic Authentication规范,服务器可以通过发送带有401状态代码的WWW-Authenticate
标头来请求身份验证。以下对我有用:
res.set({
'WWW-Authenticate': 'Basic realm="simple-admin"'
}).send(401);
我把它放在我自己的中间件中,看起来像这样:
var auth = require('basic-auth');
module.exports = function(req, res, next){
var user = auth(req);
if(validAuth){ // Here you need some logic to validate authentication
next();
} else {
res.set({
'WWW-Authenticate': 'Basic realm="simple-admin"'
}).send(401);
}
};
答案 1 :(得分:2)
基于@JustinY,这是最终结果
app.use '/editor', (req, res, next) ->
user = auth req
if (user.pass == '******')
console.log user
next()
else
res.set
'WWW-Authenticate': 'Basic realm="simple-admin"'
res.send 401, "Need password"
app.get '/editor', (req, res) ->
res.sendfile 'editor/index.html'