2017-12-21 65 views
1

Auth-> identはパスワードを確認せずに有効なユーザ名ログインを許可します。私が必要とするのは有効なユーザー名で、ダッシュボードを簡単に開くことができます。私がlogin.ctpのパスワードをpassword2に変更したとき、私はもうログインできません。これは私が昨日から直面している奇妙な問題ですが、それを解決する方法を理解していませんでした。CakePHP 3:Auth-> identify()は常にパスワードを確認せずに有効なユーザ名を入力します

これはapp.php

$this->loadComponent('Auth',['loginRedirect'=>['controller'=>'Dashboard','action'=>'index'], 
            'logoutRedirect'=>['controller'=>'Users',"action"=>"login"], 
            'authorize' => array('Controller') 
            ]); 

これは私のログイン図である。

<form class="login-form" method="post"> 
    <input type="text" placeholder="<?php echo __("Username");?>" name="username" /> 
    <input type="password" placeholder="<?php echo __("Password");?>" name="password"/> 
    <button id="btn_login"><?php echo __("Login");?></button> 
</form> 

がUserControllerでの私のログイン機能:

public function login() 
{ 
    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $this->Auth->setUser($user); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } else { 
      $this->Flash->error(__('Username or password is incorrect')); 
     } 
    } 
} 

そして最後に混乱があることもここでは、古い開発者はapp_membersというユーザー用のテーブルを作成します。彼は次のように書いたように、ユーザーと呼ばれるデータベースにはテーブルがありません:

<?php 
namespace App\Model\Entity; 
use Cake\Auth\DefaultPasswordHasher; 
use Cake\ORM\Entity; 
class User (or AppMember) extends Entity 
{ 
    protected $_accessible = ['*'=> true,'id' => false]; 
    protected function _setPassword($password) 
    { 
     return (new DefaultPasswordHasher)->hash($password); 
    } 
} 
?> 

とモデル/テーブル/ UsersTable.php彼のために:モデル/エンティティで

user.phpとappMemberの両方が、これを含んでいappMemberから延長:

<?php 
namespace App\Model\Table; 
use Cake\ORM\Table; 
use Cake\Validation\Validator; 
class UsersTable extends Table 
{ 

    public function initialize(array $config) 
    { 
     $this->table('app_member'); 
    } 
    public function validationDefault(Validator $validator) 
    { 
     return $validator 
      ->notEmpty('username', 'A username is required') 
      ->notEmpty('password', 'A password is required') 
      ->notEmpty('role', 'A role is required');    
    } 
} 

編集1: app.phpのisAuthorized機能:

public function isAuthorized($users) 
    { 
     if(isset($users)) 
     { 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
+0

は 'app_member'行いませパスワードという名前の列が含まれている、とあなたはハッシュされた値が格納されて見ていますパスワードは? – cgTag

+0

うん、すべてapp_memberでうまくいくようだし、すでにパスワードフィールド@cgTagがある。 –

+0

'function isAuthorized($ user = null)'関数をコントローラから共有できますか? – cgTag

答えて

0

問題を検索するのに多くの時間を費やした後。私誰かがCakePHPのSRC /認証/ BaseAuthenticate.phpを修正し、これをコメントしていることを見つける:

/*if (!$hasher->check($password, $hashedPassword)) { 
       return false; 
      }*/ 

PokerFace

関連する問題