2016-05-28 4 views
0

ポリシーを書き込むときにポリシーが機能しません。私のコードに何が問題なのですか?ポリシーが機能しません

policies.js

'UserController': { 
    'create': ['canCreate'] 
} 

routes.js

'post /register': { 
    controller: 'UserController', 
    action: 'create' 
} 

ポリシー/ canCreate.js

module.exports = function (req, res, next) { 
    if (req.session.canCreate) { 
     return next(); 
    } 
    else { 
     res.send('no auth') 
    } 
}; 

UserController.js

module.exports = { 
    create: function (req, res) { 
     req.session.canCreate = true; 
     User.create({ 
      name: req.param('name'), 
      password: req.param('password') 
     }, function onSuccess(err, newUser) { 
      if (err) { 
       return res.negotiate(err); 
      } 
      res.json({ 
       id: newUser.id 
      }) 
     }) 
    } 
}; 

答えて

1

ポリシーはreq.session.canCreateを探していますが、コントローラメソッドの前にポリシーが実行されているため、アクセスできないUserController.createに設定されているコードから取得します。

if (!req.session.authenticated) { 
    return next(); 
} 
else { 
    res.forbidden('already authenticated') 
} 
:あなたは本当に政策のようなものを持っているしたい場合は、全体的な構造に依存して req.session.canCreate = true;

を初期化して設定されます別のエンドポイントを追加する必要があります、私はおそらくのようなものにポリシーを変更したいです

そして、ユーザの作成とログイン時にreq.session.authenticatedを設定します。つまり、現在ログインしていない場合は誰でも*ユーザアカウントを作成できます。ユーザーがすでにログインしている場合、そのユーザー作成はポリシーによって拒否されます。

※ユーザー作成は、引き続きキャプチャや共有を使用して制限することができます(ただし、これはすべてのユースケースで適切な解決策ではありません) /秘密の秘密、または他の何らかの手段を使用して、コントローラまたはポリシーのいずれかでチェックされます。

+1

"ポリシーはコントローラメソッドの前に実行されています"、以前はcreateメソッドで実行されると思いました。今私は理解している。ありがとう。 – TopGrd

関連する問題