2016-04-12 4 views
0

ほとんどのアプリユーザーと同じように登録し、そのデータはMongooseを使用してMongoDBのユーザー文書に保存されます。EJSのページレンダリングでユーザーデータにアクセスする正しい方法

ここで重要なことは、Node.js &を使用して、EJS Temptingエンジンを使用して各ルート内にページをレンダリングすることです。レンダリングページの

アン例:

app.get('/profile',isLoggedIn,function(req, res) { 
    res.render('profile.ejs', { 
     user: req.user 
    }); 
}); 

今、あなたは、Imは私のテンプレートに、ユーザーオブジェクトを渡し、その後、ユーザがLOGGEDIN &であるかどうかをチェックすることは、上記のコードで見ることができます。ユーザーオブジェクトには、サインインしたユーザーのユーザードキュメント全体が含まれます。私は、ユーザオブジェクト使用方法

:ユーザアクセスプロフィールは、私が署名したユーザーにアクセスするためにuser: req.userオブジェクトを使用する場合、フロントエンドで

ID文書化し、私は関連情報を取得するだろうと使用しますそのユーザーに送信します。例えば

  1. ユーザーIDでログインに一致するすべてのコメントは、それのユーザーIDでログインし

相続人の例に一致するすべての記事をゲット

<body ng-init="getUserPosts('<%= user._id %>')"></body> 

上記は完全に機能します同じテクニックを何度もSE、残業、私は、ユーザーが例えば、IDは、そのユーザーアカウントに、そのユーザーまたはポストに関連するデータを取得する必要があります。

<button ng-click="savePost('<%= user._id %>')">Send</button> 

上記は常にある特定のIDを持つユーザーを(見つけましたloggedInユーザ)は自分のアカウントに投稿を保存します。

問題:

今、私のコードは完璧に動作、私は何の問題もなかったしているが、私は私がユーザーIDをはっきりと見ることができる任意のブラウザ内の要素に私のページを閲覧するときということに気づきました。以下は、私が何を意味するかを理解するための画像は、次のとおりです。

enter image description here

今、私は唯一のLOGGEDINユーザーのみが自分のIDを見ることができるということを理解しています。しかし、これは正しい方法ですか?これは有害なのでしょうか?これをどのように改善できますか?

+0

私が遭遇した1つの方法は、オブジェクトのユーザーの「_id」を除外し、暗号化された値を送信することです。サーバが暗号化された '_id'を受信すると、サーバはそれを復号化してから通常通り処理を進めます。これは、真の '_id'がユーザに露出されないことを意味します。ユーザは、他の場所でそれを破損する可能性があります。 –

+0

'

+0

@JoeClayコメントをいただきありがとうございます。現在のところ、私が行う唯一のチェックは、ユーザーがloggedInされたユーザーであるかどうかを確認することです。他に何をお勧めしますか?または、これとはまったく異なる方法ですか? – Skywalker

答えて

0

私のコメントとして、1つの方法はuser._idの値を暗号化してからクライアントに送信することです。

app.get('/profile',isLoggedIn,function(req, res) { 
    var user = req.user; 
    user._id = encrypt(user._id); 
    res.render('profile.ejs', { 
     user: user 
    }); 
}); 

これは、あなたが

<button ng-click="savePost('someEncryptedValue')">Send</button> 

あなたの生のmongo idはもはやクライアントに公開されているを取得したHTMLを意味します。

バックエンドでは、最初に値を復号化し、次に続行します。

app.get(/userPosts,function(req,res){ 
    var userId = decrypt(req.query.id); 
    Posts.find({userId:userId},function(err,posts){ 
     res.send(posts); 
    }); 
}); 
+0

ありがとうございました!私はこれを試し、それがどのように進むのかを教えてくれるでしょう。 – Skywalker

+0

好奇心の外に、あなたは実際に暗号化を実行するために何を使用/推奨する傾向がありますか? –

+0

これは良いチュートリアルです。 http://lollyrock.com/articles/nodejs-encryption/ –

関連する問題