Express:一条路线的基本认证

时间:2014-07-05 07:01:14

标签: javascript node.js authentication express

我试图制作一套工具来访问我的数据库。大多数都与我的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上进行身份验证?

2 个答案:

答案 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'