使用ExpressJS和CouchDB进行用户身份验证

时间:2016-10-22 20:21:48

标签: javascript session authentication express couchdb

我尝试通过前端表单将CouchDB用户登录到我的快递应用程序并将登录信息存储在会话中。到目前为止的内容如下:

app.js:

var express = require('express');
var couchUser = require('express-user-couchdb');
var session = require('express-session');

var login = require('./routes/login');

var app = express();

app.use(couchUser({
    users: 'http://localhost:5984/_users',
    request_defaults: {
        auth: {
            user: 'admin',
            pass: 'adminpw'
        }
    }
}));

app.use(session({ secret: 'secretstring'}));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', login);

和我的login.js:

var express = require('express');
var router = express.Router();
var couchUser = require('express-user-couchdb');

/* GET users listing. */
router.get('/', function(req, res, next) {
    res.render('login', {title: 'Login'});
});

router.post('/login', function(req, res) {
    // Don't know what to put here
    //res.send(req.body.username)
});

module.exports = router;

我不知道如何继续我的login.js路线。任何帮助表示赞赏。

更新 - 由于我无法完全理解下面的代码,因为我没有完全理解它,研究引导我找到以下解决方案:

router.post('/', function(req, res) {

    var options = {
        url: 'http://localhost:5984/_session',
        method: 'POST',
        json: {
            "name": "admin",
            "password": "password"
        }
    };


    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log('authenticated');
        }else{
            console.log('not authenticated');
            res.redirect('/')
        }
    });
});

当我通过HttpRequester做同样的请求时,我得到Statuscode 200和{" ok":true," name":null," roles":[& #34; _admin"]} ..但是通过nodejs,即使它应该是相同的,它也不会这样做?!

1 个答案:

答案 0 :(得分:0)

要验证针对CouchDB的用户凭据,请按照CouchDB documentation中的示例进行操作。

curl -X POST http://localhost:5984/_session -d 'name=jan&password=apple'

成功验证后,您可以将CouchDB凭据保留为session storage

我创建了一个"概念证明"代码甚至可能不正确,因为我不是nodejs专家。但经过一些调整后,它应该有效。

var http = require('http');

router.post('/login', function(req, res) {
    var session = req.session;
    request.post('http://localhost:5984/_session')
        .auth(req.data.username, req.data.password, true)
        .on('response', function(response) {
            if(response.statusCode == 200) {
                session.couchSession = req.data.username + ':' + req.data.password;
                res.status(200);
                res.send();
            } else {
                res.status(400);
                res.send('Wrong credentials');
            }
        });
});
相关问题