2017-04-20 8 views
0

MEANスタックを使用してWebアプリケーションを構築しています。MEANスタック内のREST API、セッションからIDとIDを渡しました

私がGETのために次のエンドポイント

/api/contacts/:id 

と例の多くを見るREST APIを構築する際、PUTとDELETEメソッド。

私は何か違ったことをしましたが、私はExpressフレームワークでセッションを有効にしました。アクセスできるようにすると、req.session.req.payload._idの下でユーザー文書ID(mongoDB)が見えます。ドキュメント。

なぜ私は HTTPリクエストをしたときにURLにユーザー文書IDを公開する必要はありません。

私の質問は、どの方法がより使いやすく安全であるかです。

また、セッションを使用しない場合に備えて、AngularのユーザーIDをHTTPリクエストに渡すにはどうすればよいですか。

最後に、私はDBを更新する関数を呼び出す前にJWTをミドルウェアとして使用します。これは私にいくつかの安心感を与えますが、正しいトークンを持つユーザーが異なるIDでHTTPリクエストを行い、他のユーザーのデータを取得、更新、削除することはできません。 これは私が使用している現在の方法では不可能です(セッション)

答えて

0

ユーザIDをエンドポイントに渡す必要がある場合、クライアントコードはそれを知る必要があり、それは提供する必要のあるバックエンドです何らかの形で - 返されたトークンの一部として、または通常、成功したログイン要求に対する応答の一部として。クライアントは、クッキーまたはローカルストレージに保存して後で使用することができます。

それはのようにすべてのルート内のユーザーのIDを提供するために持っている、しかし、非常に実用的ではありません:ユーザーが他のユーザーの連絡先にアクセスできるようにする必要がある場合は、あなたがする必要があるかもしれ

/api/contacts/:id 

ルート内のIDを使用すると、ユーザーが自分の連絡先を操作したいときに別のルートセットを使用したくない場合があります。

/api/contacts/me 

へ:私は時々このような状況では、実際に行って見てきたもの

は、「私」のようなIDのための特別な値を使用して、バックエンドは、このようなすべてのルートを翻訳することです

/api/contacts/:id 

ここで、:idは、セッションから取得したリクエストのユーザーのIDです。これは、すべてのルートの値を一度に置換するためのミドルウェアを使用して行うことができます。次に、通常のコントローラは、それがルートで提供されたように使用できます。

+0

私はセッションからIDを取得している場合はどうして私は "私"が必要ですか?私は/ api/contactsとして残すことができ、各ユーザーはセッションに応じて要求されたデータを取得できると思います。また、ユーザーが他のユーザーのデータにアクセスする必要もありません。ユーザーが望むIDでユーザーがHTTPリクエストを行うことを許可することは、私には安全ではないようです。 –

関連する問題