2016-05-16 9 views
0

ログイン/認証セクションに関するCakePHP 3.0チュートリアル(Bookmarker &ブログ)に従っていますが、それを自分のコードに適用していますが、正しく動作しないようです。CakePHP 3.0 - ログインが動作しません

ログインしなくてもすべてのインデックスが表示されます。システムへのログインは機能しません。ログインページが更新されます。

EDIT:私のテストユーザーがダダになったようですが、新しいユーザーを作成してログインできます。しかし、私はまだ非ユーザがテーブルのインデックスを見ることができるという問題を抱えています(特に許可されているUser以外のテーブルでは変数を作成できません)。

EDIT2:AppControllerのbeforeFilter関数を削除して修正しました。

ユーザーコントローラー:

<?php 
namespace App\Controller; 

use App\Controller\AppController; 
use Cake\Event\Event; 

class UsersController extends AppController 
{ 
    public function beforeFilter(Event $event) 
    { 
     parent::beforeFilter($event); 
     $this->Auth->allow(['add', 'logout']); 
    } 

    public function login() 
    { 
     if ($this->request->is('post')) { 
      $user = $this->Auth->identify(); 
      if ($user) { 
       $this->Auth->setUser($user); 
       return $this->redirect($this->Auth->redirectUrl()); 
      } 
      $this->Flash->error(__('Incorrect username or password, please try again.')); 
     } 
    } 

    public function logout() 
    { 
     $this->Flash->success('You are now logged out.'); 
     return $this->redirect($this->Auth->logout()); 
    } 

    public function index() 
    { 
     $this->set('users', $this->Users->find('all')); 
    } 

    public function view($id) 
    { 
     $user = $this->Users->get($id); 
     $this->set(compact('user')); 
    } 
} 

のAppコントローラ:

<?php 

namespace App\Controller; 

use Cake\Controller\Controller; 
use Cake\Event\Event; 

class AppController extends Controller 
{ 
    public function initialize() 
    { 
     $this->loadComponent('Flash'); 
     $this->loadComponent('Auth', [ 
      'loginRedirect' => [ 
       'controller' => 'Users', 
       'action' => 'index' 
      ], 
      'logoutRedirect' => [ 
       'controller' => 'Pages', 
       'action' => 'display', 
       'home' 
      ] 
     ]); 
    } 
} 

ユーザー表:

<?php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\Validation\Validator; 

class UsersTable extends Table 
{ 

    public function validationDefault(Validator $validator) 
     { 
     $validator 
      ->integer('id') 
      ->allowEmpty('id', 'create'); 

     $validator 
      ->requirePresence('username', 'create') 
      ->notEmpty('username', 'A username is required'); 

     $validator 
      ->requirePresence('password', 'create') 
      ->notEmpty('password', 'A password is required'); 

     $validator 
      ->email('email') 
      ->requirePresence('email', 'create') 
      ->notEmpty('email', 'An email is required'); 

     $validator 
      ->requirePresence('role', 'create') 
      ->notEmpty('role', 'inList', [ 
       'rule' => ['inList', ['admin', 'artist', 'engineer']], 
       'message' => 'Please enter a valid role' 
      ]); 

     return $validator; 
    } 
} 
+0

実際の質問を編集したので、残りの部分を更新して関連するコードを追加するか、このコードを閉じて新しい質問を再度お願いしてください。 – Dave

+0

AppControllerで '$ this-> Auth-> allow(['index'、 'view'、 'display']);を使い、これをUsersControllerで呼び出します – rrd

答えて

0

私はAppControllerの中のbeforeFilter機能を除去することによって、それを修正するために管理。

0

公開関数beforeSave(イベント$イベント) { $エンティティ= $イベント - >データ['エンティティ'];

  // Make a password for digest auth. 
      $entity->digest_hash = DigestAuthenticate::password(
       $entity->username, 
       $entity->password, 
       env('SERVER_NAME') 
      ); 
      return true; 
     } 
関連する問題