2017-11-19 4 views
0

このチュートリアルhttps://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.htmlに従って登録フォームを作成しましたが、パスワードは暗号化なしのプレーンテキストとしてデータベースに保存されています。私の問題を整理するのを助けてください。 はここに私のコードです:Cakephp 3のパスワードをハッシュできません

Add.ctp

<h1>Register new user </h1> 


<div class="users form"> 
<?= $this->Form->create($user) ?> 
    <fieldset> 
     <legend><?= __('Add User') ?></legend> 
     <?= $this->Form->control('username') ?> 
     <?= $this->Form->control('password') ?> 

    </fieldset> 
<?= $this->Form->button(__('Submit')); ?> 
<?= $this->Form->end() ?> 
</div> 

エンティティ/ User.php

<?php 
namespace App\Model\Entity; 

use Cake\Auth\DefaultPasswordHasher; 
use Cake\ORM\Entity; 

class User extends Entity 
{ 

    // Make all fields mass assignable except for primary key field "id". 
// Make all fields mass assignable for now. 
protected $_accessible = ['*' => true]; 

protected function _setPassword($password) { 
    return (new DefaultPasswordHasher)->hash($password); 
} 

    // ... 
} 

?> 

UsersTable.php

<?php 
namespace App\Model\Table; 

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

class UsersTable extends Table 
{ 
    public function validationDefault(Validator $validator) 
    { 
     return $validator 
     ->notEmpty('username', 'A username is required') 
     ->notEmpty('password', 'A password is required'); 

    } 


} 

?> 

UsersController.php

<?php 

namespace PanelAdmin\Controller; 

use Cake\Controller\Controller; 
use Cake\ORM\TableRegistry; 
use Cake\Event\Event; 

class UsersController extends AppController 

{ 

public function beforeFilter(Event $event) 
    { 
     parent::beforeFilter($event); 
     $this->Auth->allow('add'); 
    } 

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

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

    public function add() 
    { 
     $user = $this->Users->newEntity(); 
     if ($this->request->is('post')) { 
      // Prior to 3.4.0 $this->request->data() was used. 
      $user = $this->Users->patchEntity($user, $this->request->getData()); 
      //debug($user); die; 
      if ($this->Users->save($user)) { 
       $this->Flash->success(__('The user has been saved.')); 
       return $this->redirect(['action' => 'add']); 
      } 
      $this->Flash->error(__('Unable to add the user.')); 
     } 
     $this->set('user', $user); 
    } 

    } 

?> 

ディレクトリ構造: enter image description here

+0

コードが正常に表示されます。更新されたファイルをアップロードしてキャッシュファイルを削除してもよろしいですか? –

+0

@Ofir Baruch:そうです。私はモデルファイルが呼び出されていないと思います。なぜなら、私がそれをデバッグしても何の違いもなく、何も印刷されないからです。 – user3653474

+0

このリンクはhttps://github.com/cakephp/cakephp/issues/3863にチェックされていますが、何も動作しません – user3653474

答えて

0

あなたの名前空間が間違っている、またはあなたが間違った場所にコードを入れているのどちらか。コードがPanelAdminプラグインの内部にあると想定されている場合は、モデル/エンティティクラスにAppという名前空間を使用するのではなく、PanelAdminという名前空間を使用してください。

+0

ありがとう@ndm。名前空間を変更すると私の問題が解決しました。 – user3653474

関連する問題