2016-08-21 10 views
0

このユースケースでは、ユーザー(プロバイダとコンシューマ)の2つの異なるモデルが必要です。したがって、ユーザーモデルをコンシューマーとプロバイダーのモデルに拡張しましたが、プロバイダーのAccessTokenもコンシューマーのために働き始めた時点ですぐに問題に遭遇しました。ループバック拡張アクセストークンモデルで問題が発生する

例:プロバイダAがユーザIDが1であり、ユーザAがユーザIDが1であると仮定しよう。プロバイダAがログインしてAccessTokenを受信した場合、ユーザはaccessTokenでコンシューマモデルをクエリしてコンシューマAに関する情報を抽出することもできる。これは災害を喚起することができます。 ctx.req.accessToken.userIdは、コンシューマモデルでコンシューマトークンとプロバイダトークンの両方を1を返します。

AccessTokenモデルをAccessTokenProviderとAccessTokenConsumerに拡張しようとしました。ここでAccessTokenConsumer

"relations": { 
"user": { 
"type": "belongsTo", 
"model": "consumer", 
"foreignKey": "userId" } } 

と消費モデルの

"relations": { 
    "accessTokens": { 
     "type": "hasMany", 
     "model": "AccessTokenConsumer", 
     "foreignKey": "userId", 
     "options": { 
     "disableInclude": true 
     } 
    } } 

のモデル関係があるしかし、今ctx.req.accessTokenはnullを返し、ログアウト残りの機能は、「accessTokenを見つけることができませんでした」のエラーになります

答えて

0

ここでIvanZhの答えを試しましたMultiple User child Models problem

node_modules/loopback/common/models/user.jsにはの直後にttl:ttlの後にUser.prototype.createAccessTokenメソッドを追加します。次に、access_token.jsonにmodelプロパティを追加します。テーブルをデータベースに再移行する必要があるかもしれません。

モデル名がctx.req.accessToken.modelに追加され、条件付きで正しいモデルタイプのみが呼び出されるようにすることができます。

注意:これはループバックを更新すると上書きされます。確かに、この機能は、Loopbackに組み込まれていなければなりません。なぜなら、その欠如は、ドキュメントの不備によってすでに傷ついている強力なフレームワークの魅力にはならないからです。

関連する問題