我尝试通过前端表单将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,即使它应该是相同的,它也不会这样做?!
答案 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');
}
});
});