2016-10-22 16 views
0

私はエクスプレスアプリにフロントエンドフォームを使ってCouchDBユーザをログインさせ、そのセッションにログインを保存しようとしています。何がこれまでに以下されていますExpressJSと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; 

を私は自分のログインで上に行く方法がわかりません。 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を経由しても同じでなければなりません。

答えて

0

CouchDBに対するユーザーの資格情報を検証するには、CouchDB documentationの例に従ってください。認証が成功した後

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

あなたはsession storage CouchDBの資格を維持することができます。

私はというノードのエキスパートでないので、おそらくは正しいとは言えない "概念の証明"コードを作成しました。しかし、いくつかのチューニングの後、それは動作するはずです。

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'); 
      } 
     }); 
}); 
+0

お返事ありがとうございます。だから、私はexpress-user-couchdbミドルウェアは必要ないと思っていますか?そして2番目:このカール要求はどこで実行すればよいですか? nodejsから呼び出されることを意味しますか? – grexwex

+0

特にcURLリクエストである必要はありません。むしろ 'http'か' request'ライブラリを使いたいと思います。あなたのユースケースに応じて、私はこのミドルウェアを使うかどうかを決めます。もう1つのことは、それがひどく維持されていないということです(ソースコードの最終更新は2年前ですが、数週間前にCouchDB 2がリリースされました!)。 – niespodd