2011-12-09 12 views
2

ログインとセッションに関する質問があります。私はこのコードを持っている:Expressjs認証

DBクエリ:

login: function(req,callback) { 
    var query = 'SELECT id FROM users WHERE email = "' + req.body.email_login + '" AND password = "' + hashlib.sha1(req.body.password_login) + '" LIMIT 1'; 
    client.query(query, callback); 
} 

ルート:

app.post('/login', function(req, res, next) { 

    users.login(req,function(err, results) { 
     if (err) { 
      res.render('index'); 
     } else if (results[0]) { 
      req.session.userdata = results[0]; 
       req.session.is_logged_in = true; 
       res.render('site/news'); 
     } 

    } 
} 

認証ミドルウェア:

var auth = function (req, res, next) { 
    if (req.session.userdata && req.session.is_logged_in === true) { 
     next(); 
    } else { 
     res.redirect('/'); 
    } 
} 

セッション用にdb storeを使用しています。

今私の質問は以下のとおりです。

1)これはそれを行うための安全な方法ですか?それとも何か他の方法でやってみるべきですか?

2)このURLは/domain/users/1です。ここで、最後のセグメントはユーザーデータを取得するために使用されるユーザーIDです。 このビューには、ユーザーデータを変更するためのフォームがあります。ユーザーIDがセッションユーザーIDと一致するかどうかを確認してからフォームを表示するのは安全ですか?ビューで

// e.g. get the session.id from dynamichelper 
if (data.userid === session.userdata.id) { 
    // The form where user can change his data contained within here 
} 

は、サーバーがSSLを使用する予定です。 DBクエリのコードでは、事前に

おかげ

ジョージ

答えて

6

は、彼らがnullじゃないと、彼らは文字列だということを確認するためにreq.body.email_loginとreq.body.password_loginをチェック。誰かが空のレスポンスを送信して、あなたの側で内部エラーを生成します。

またルートで、あなたがエラーを記録し、/500.htmlページ(内部エラー)にユーザーをリダイレクトすることがあります:

if (err) { 
    console.log(error); 
    res.redirect('500'); 
} else ... 

あなたはビューでこれを行うべきではありません。

if(data.userid === session.userdata.id) { //The form where user can change his data contained within here } 

そのための機能を作成し、そのようなビューにのみつのパラメータを渡し、(好ましくは)モデルでこれを達成するために代わりにしてみてください。

res.render('view', { loggedIn: true }); 

モデルから機能:

function checkUser(id, session) { 
    return (userid === session.userdata.id); 
} 
... 
module.exports.checkUser = checkUser; 

あなたは(例のために)そうのようなルートからそれを呼び出すことができます。

res.render('view', { loggedIn: model.checkUser(req.body.id, req.session); } 
+0

こんにちはで見たいと思うかもしれません。 )OK、良いアドバイスが、私は確かに私は一つのことを把握していない、なぜ私はビューのIDを確認しないでください?それはどうやって見えるだろう?小さな例かもしれない? – georgesamper

+0

これを行うことができます。これはちょっとアドバイスされています。ヘルパー、モデルなど、このような種類のものを他の構造にすることができます。ここで例を追加します。 – alessioalex

+0

いくつかの小さな例で私の回答を編集しました。 – alessioalex