【问题标题】:User Authentication with ExpressJS and CouchDB使用 ExpressJS 和 CouchDB 进行用户身份验证
【发布时间】:2016-10-22 20:21:48
【问题描述】:

我正在尝试通过前端表单将 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":["_admin"]} .. 但通过 nodejs 它不会这样做即使它应该是一样的?!?

【问题讨论】:

    标签: javascript session authentication express couchdb


    【解决方案1】:

    要针对 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');
                }
            });
    });
    

    【讨论】:

    • 感谢您的回答。所以在你看来我不需要 express-user-couchdb 中间件?第二:我应该在哪里执行这个 curl 请求?是不是要从 nodejs 调用?
    • 不一定是专门的 cURL 请求。我宁愿使用http 或request 库。根据您的用例,我是否会使用此中间件。另一件事是它没有得到大量维护(源代码的最后一次更新是在 2 年前;再加上几周前发布了 CouchDB 2!)。
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多