0

私は多くの調査を行い、さまざまな例に従いましたが、それでも正しく実行できません。

したがって、ここに登録からのコントローラー アクションの一部があります。

if(!empty($this->request->data)){

        $this->request->data['Company']['start_date']= date("Y-m-d");
        unset($this->Company->User->validate['company_id']);
        if($this->Company->saveAssociated($this->request->data)){
                $user = $this->request->data['User'];
                $data['User']['password'] = $user[0]['password'];
                $data['User']['email'] = $user[0]['email'];
            if($this->Auth->login($data)){
                $this->redirect($this->Auth->redirect(array('controller'=>'customers', 'action'=>'index')));
            }...

したがって、ユーザーが保存され、ユーザーの電子メールとパスワードの新しい配列が作成されます。次に、$this->Auth->loginに渡されます。ログインは成功したように見えますが、顧客コントローラーへのリダイレクトで次のエラーが発生します。

Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 32]
Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 36]

役割フィールドは、ユーザー作成時にマネージャーとして自動設定されますが。CustomerController は次のようになります。

パブリック関数 isAuthorized($user){

if($user['role'] == 'manager'){
    return true;}
if (in_array($this->action, array('add', 'edit', 'index', 'view', 'delete', 'users'))){
    if($user['role'] != 'manager'){
        return false;
    }}return true;}

どんな助けでも大歓迎です。

4

1 に答える 1

0

ドキュメントとソースを確認してくださいAuthComponent::login()

ユーザー データを に渡す場合AuthComponent::login()、ユーザーはログインしていますが、認証は行われません。この場合の「ログイン」は、提供されたデータがセッションに保存されていることを意味し、次のリクエストでは、データがセッションに存在する場合 (コンポーネントによって使用される特定のキー)、ユーザーはログイン済みとして扱われます。つまり、 を渡すだけでも123456、ユーザーはログインしているものとして扱われます。

一方、認証を行うと DB ルックアップが発生し、そこですべてのユーザー データが取得され、その結果セッションに保存されます。

に渡していないため、roleフィールドは使用できません。とAuthComponent::login()のみを渡したため、後で使用できるのはこれらのフィールドのみです。ところで、そのような手動ログインを行うときは、パスワードを入力しないでください! セッションでそのような機密情報を持ち歩く必要はありません。emailpassword

この問題を解決するには、roleフィールドもAuthComponent::login()渡すか、データをまったく渡さずに呼び出します (リクエストで渡されたデータが使用されるように、フォーム認証を使用していることを確認してください)。これにより、ユーザーが認証され、取得されます。 DB からのデータ。

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.htmlも参照してください

于 2013-10-31T20:02:11.780 に答える