2017-03-21 13 views
0

ユーザー認証を使用して練習しようとしています。node.jsでユーザー認証を使用する方法

しかし、私は期待どおりに動作しません。

私にはログインインターフェイスが表示されると予想しました。

STEPS:

1.useのローカルホスト:12345/login_page

ユーザ名とパスワードで私にサーバー

2.thenショーに

3.keyをログインインターフェイスを接続します

var express = require('express'); 
var cookieSession = require('cookie-session'); 
var app = express(); 

app.use(cookieSession({ 
    secret: 'session', 
    keys: 'node' 
})); 

app.get('/login_page', function(req, res){ 
    if(!req.session.logined){ 
     res.send('<a href="http://127.0.0.1:12345/logout">Logout Now</a>'); 
     res.end(); 
     return; 
    } 
    res.send('<form action="http://localhost:12345/login" method="POST">'); 
    res.send('<input type="text" name="username">'); 
    res.send('<br/>'); 
    res.send('<input type="password" name="password">'); 
    res.send('<br/>'); 
    res.send('<input type="submit" value="login">'); 
    res.send('</form>'); 
    res.end(); 
}); 

app.post('/login', function(req, res){ 
    if(res.body.username != 'user' || 
     req.body.password != '12345678'){ 

     res.send('Account or password error, please login again'); 
     res.end(); 
     return; 
    } 
    res.session.logined = true; 
    res.redirect('/login_page'); 
    res.end(); 
}); 

app.post('/logout', function(req, res){ 
    req.session.logined = false; 
    res.redirect('/login'); 
    res.end(); 
}); 

app.listen(12345); 
+0

'res.send'を2回使用することはできません。ログインページを 'html'ファイルとして送るべきです。 –

+0

私の更新された回答を参照してください。 – rsp

答えて

1

変更する必要があります:

res.session.logined = true; 

req.session.logined = true; 

また、res.write()res.send()を変更します。

ボディパーサーを使用します。

res.bodyからreq.bodyに変更してください。

コンテンツタイプをtext/htmlに変更します。

これらは、そのプログラムのバグのすべてではないかもしれませんが、それらは最も明白なものです。あなた自身でそれを実装する際に問題があることを考えれば、Passportを使用する方が良いかもしれません。具体的には、passport-local戦略を使用する方が良いでしょう。ここでは良いチュートリアルです:

やHTMLなどの静的ファイルを、ホスティングのために、この回答を参照してください。

+0

申し訳ありませんが、私は非常に重大な間違いを犯しました。あなたが共有した情報は私に大きな助けをもたらしました。今私は問題を解決する。ありがとうございます。 –

0

あなたがここにいくつかのミスを持っています。 まず、res.send()機能を1回のリクエストで2回以上使用することはできません。最後にres.endを使用する必要はありません。

だから、あなたのコードは次のようになりなければならない。

var express = require('express'); 
var cookieSession = require('cookie-session'); 
var app = express(); 

app.use(cookieSession({ 
    secret: 'session', 
    keys: 'node' 
})); 

app.get('/login_page', function(req, res){ 
    if(!req.session.logined){ 
     res.send('<a href="/logout">Logout Now</a>'); 
    } 
    res.send('<form action="/login" method="POST"> <input type="text" name="username"><br/><input type="password" name="password"><br/><input type="submit" value="login"></form>'); 
}); 

app.post('/login', function(req, res){ 
    if(res.body.username != 'user' || 
     req.body.password != '12345678'){ 

     res.send('Account or password error, please login again'); 
    } 
    req.session.logined = true; 
    res.redirect('/login_page'); 
}); 

app.post('/logout', function(req, res){ 
    req.session.logined = false; 
    res.redirect('/login'); 
}); 

app.listen(12345); 

と明らかにし、より良い練習のために、あなたは「res.render or 'res.sendFileを使用して、htmlファイルを使用して応答を送信する必要があります。

+0

私の問題は解決できません。しかし、どこが間違っているか教えてください。あなたに非常に感謝します。 –

関連する問題