この質問は、具体的にはコードの半分であり、ノードAPIから特定のユーザーのデータを実際に取得する高度なビューの半分です。ノード/エクスプレスのJWTに基づいてユーザーのデータを取得
ユーザーサインアップ/サインインはすべて正常に機能しており、ユーザーとウィジェットの間に1対多のマッピングがあるため、各ユーザーは自分のプロファイルページからウィジェットを作成および削除できます。私はJWTを生成し、フロントエンドで認証ヘッダーを保存するためにそれを使用、ユーザーのログイン・プロセスで
var User = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true
},
hash: String,
salt: String
widgets : [{ type: Schema.Types.ObjectId,
ref: 'widget'
}],
});
var Widget = new mongoose.Schema({
name : String,
type : String,
description : String,
});
:だからここ
は私のデータベースモデルです。
私の質問は2倍です。 1)現在ログインしているユーザーと関連付けられるようにウィジェットを正しく保存するにはどうすればよいですか? 2)ユーザーに関連付けられたすべてのウィジェットを取得するにはどうすればよいですか?
app.get('api/widgets', function(req, res, next){
// decode authorization header to get user email
// run database query to return all widgets associated with user email
});
app.post('api/widgets', function(req, res, next){
// decode authorization header to get user email
// create widget and update user with widget ID
});
これは正しい考えである:
私の最初の考えは、このようなものがありますか?もしそうなら、ユーザの電子メールを取得するために認証ヘッダーをデコードするにはどうすればいいですか?ユーザーと関連付けられたすべてのオブジェクトに対してこの同じプロセスを実行する必要がありますか?または、Node/Expressでこれを行うより高速で便利な方法がありますか?
はい、あなたはJWT内のユーザーのウィジェットのデータを保存することができますが、各ウィジェットの動作を追加/削除した後、それを更新しなければなりません、そして、それはクライアントとの新しいJWTを同期させるために追加のロジックが必要になります。非常に簡単な方法は、セッションを使用することです。 – alexmac
申し訳ありませんが、私は元の質問ではっきりしていたかどうかは分かりません。私はJWTにウィジェットデータを保存したくありません。私はちょうどJWTにユーザーの電子メールを保存しています。「ウィジェットIDを持つユーザーを更新する」とは、データベース内のユーザーをウィジェットIDで更新することを意味します。 – jmknoll
これは正しい方法だと思います。あなたがエンコードされたjwtトークンにいくつかのライブラリを使用している場合は、ほとんどの場合、おそらくデコード機能もあります。ウィジェットを保存するには、単純にウィジェットモデル 'new Widget({name ....})のsave関数を使用します。save(function(err、widget){ここで$ push演算子を使ってユーザを更新}}' exec(function(err、user){ここにはウィジェットの配列がありますが、IDではなく、ウィジェットコレクションからの実際のオブジェクト}); – Molda