質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

0回答

1010閲覧

CakePHP 3.2 でAuth認証を通したいのですが、identifyの返しがfalseになってしまいます。

korororo

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2021/04/29 07:23

編集2021/04/29 07:26

##実現したいこと
一番重要なことはAuth認証を通すことです。

質問としてはどうしたらidentifyにUsersモデルの配列を返すことができるのかを
知りたいということです。
identifyをデバッグするとfalseが返ってきます。
会社の開発環境を使っていて会社のユーザー情報でログインすると通り、
userModelを変更してログインするとfalseが返ってきます。
Modelを手打ちしたのが悪いのか、AppControllerのAuth設定がおかしいのか
分からない状態です。
どなたかお力添えを頂きたいです。

##それぞれのMVC
前提
・会社の開発環境を使っているため一部、二度手間になっています。
(例 AppControllerを直で変えられないため、別でAppControllerを作成して継承している。)

Model
・AbeUsersTable.php ユーザー情報のTable。会社の開発環境のためbake機能を使わず手打ちで作成。
・AbeUser.php ユーザー情報のEntity。会社の開発環境のためbake機能を使わず手打ちで作成。
DB
・abe_users MySQLで作成。

Controller
・AbeAppController.php AppControllerと同じ役割ですがAuth認証のために別で作成。
・AbeUsersController.php ユーザーに関するController。loginとlogoutとaddメソッド。

##ソースコード

AbeUsersTable

1<?php 2 3namespace App\Model\Table; 4 5use App\Model\Entity\AbeUser; 6use Cake\ORM\Query; 7use Cake\ORM\RulesChecker; 8use Cake\ORM\Table; 9use Cake\Validation\Validator; 10 11class AbeUsersTable extends Table 12{ 13 public function initialize(array $config) 14 { 15 parent::initialize($config); 16 //$this->table('abe_users'); 17 $this->displayField('username'); 18 $this->primaryKey('id'); 19 $this->addBehavior('Timestamp'); 20 } 21 22 public function findAuth(\Cake\ORM\Query $query,array $options){ 23 $query->select(['username','password','delete_flag']) 24 ->where(['AbeUsers.delete_flag' => 0]); 25 return $query; 26 } 27 28 public function validationDefault(Validator $validator){ 29 30 //@property int unsiged $id 31 $validator 32 ->add('id','valid',['rule' =>'numeric']) 33 ->notEmpty('id'); 34 return $validator; 35 36 //@property string $username 37 $validator 38 //->scalar('username') 39 ->requirePresence('username') 40 ->maxLength('username',50,'最大文字数を超えています。'); 41 42 //@property string $password 43 $validator 44 //->scalar('password') 45 ->requirePresence('password') 46 ->maxLength('password',255); 47 48 これより下は割愛 49 } 50}

AbeUser

1<?php 2namespace App\Model\Entitty; 3 4use Authentication\PasswordHasher\DefaultPasswordHasher as PasswordHasherDefaultPasswordHasher; 5use Cake\ORM\Entity; 6use Cake\Auth\DefaultPasswordHasher; 7 8/** 9 * AbeUser Entity 10 * 11 * @property int unsiged $id 12 * @property string $username 13 * @property string $password 14 * @property string $prefecture_cd 15 * @property boolean $authority_kbn 16 * @property string $name 17 * @property string $kana 18 * @property Cake\I18n\Time $birthday 19 * @property string $zip 20 * @property string $address1 21 * @property string $address2 22 * @property string $tel 23 * @property string $mobile_phone 24 * @property string $mail1 25 * @property string $mail2 26 * @property string $remarks 27 * @property int $delete_flag 28 * @property \Cake\I18n\Time $created 29 * @property \Cake\I18n\Time $modified 30 * 31 * passwordのハッシュ化 32 * @param string $password パスワードの文字列 33 * @return string ハッシュ化されたパスワード 34 * */ 35 36 37class AbeUser extends Entity 38{ 39 protected $_accessible = [ 40 '*' => true, 41 'id' => false, 42 ]; 43 44 protected function _setPassword($password){ 45 $hasher = new DefaultPasswordHasher; 46 return $hasher->hash($password); 47 } 48 49}

AbeUsersController

1<?php 2namespace App\Controller; 3 4use App\Controller\AbeAppController; 5use App\Model\Entity\AbeUser; 6use App\Model\Table\AbeUsersTable; 7use App\Controller\UnauthorizedException; 8use Cake\Event\Event; 9use Cake\Auth\DefaultPasswordHasher; 10 11/** 12 * beforeFilter 13 * @param Event $event イベントオブジェクト 14 * @return void 15 * 16 * index 17 * 18 */ 19 20 21class AbeUsersController extends AbeAppController 22{ 23 public function initialize(){ 24 parent::initialize(); 25 } 26 27 public function beforeFilter(Event $event){ 28 parent::beforefilter($event); 29 $this->Auth->allow(['index','login','add']); 30 } 31 32 //AbeUsersの一覧 33 public function index(){ 34 $this->loadModel('AbeUsers'); 35 $users = $this->AbeUsers->find('all'); 36 $this->set(compact('users')); 37 38 } 39 40 //AbeUsersのログイン画面 41 public function login(){ 42 $this->set('title3','会員ログイン'); 43 $this->loadModel('AbeUsers'); 44 if($this->request->is('post')){ 45 $user = $this->Auth->identify(); 46 if($user){//該当するユーザーがいればログイン処理 47 $this->Auth->setUser($user); 48 return $this->redirect($this->Auth->redirectUrl());//Cookbook 49 }else{ 50 $this->Flash->error(__('Username or Password is incorrect.'));//Cookbook 51 } 52 } 53} 54 55 //AbeUsersのログアウト画面遷移 56 public function logout(){ 57 $this->request->session()->destroy();//セッションの破棄 58 return $this->redirect($this->Auth->logout());//ログアウト処理 59 } 60 61 //AbeUsersのユーザー追加 62 public function add(){ 63 if($this->request->is('post')){//POST送信かどうかの確認 64 $user = $this->AbeUsers->newEntity();//POST送信ならAbeUsersのnewEntityメソッドを呼び出し、インスタンスを作成 65 $user = $this->AbeUsers->patchEntity($user,$this->request->data);//インスタンスに取得したデータをマージする 66 if($this->AbeUsers->save($user)){//データを保存できたらindexを返す 67 return $this->redirect(['action' => 'index']); 68 } 69 } 70 } 71 72 73}

AbeAppController

1<?php 2namespace App\Controller; 3 4use Cake\Controller\Controller; 5use Cake\Event\Event; 6use Cake\ORM\Entity; 7use Cake\ORM\Table\AbeUsersTable; 8use Cake\Auth\DefaultPasswordHasher; 9use Cake\ORM\Entity\AbeUser; 10 11/** 12 * Application Controller 13 * 14 * Add your application-wide methods in the class below, your controllers 15 * will inherit them. 16 * 17 * @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller 18 */ 19class AbeAppController extends Controller 20{ 21 22 public function initialize() 23 { 24 parent::initialize(); 25 $this->loadComponent('Flash'); 26 $this->loadComponent('RequestHandler'); 27 //CSRFコンポーネントの有効化 28 //$this->loadComponent('Csrf'); 29 $this->loadComponent('Auth',[ 30 'authorize'=> ['Controller'],//認可ハンドラーの設定 31 'authenticate' => [ 32 'Form' => ['userModel' =>'AbeUsers', 33 'finder' => 'auth', 34 'fields' =>['username' => 'username','password' => 'password'] 35 ] 36 ], 37 'loginAction' => ['controller' => 'AbeUsers','action' => 'login'], 38 //ログイン後の画面遷移 39 'loginRedirect' => ['controller' => 'AbeMasters','action' =>'menu'], 40 //ログアウト後の画面遷移 41 'logoutRedirect' => ['controller' => 'AbeUsers','action' => 'login',], 42 'authError' => 'ログインできませんでした。', 43 //'strage' => 'Memory', 44 ]); 45 } 46 47 48 public function isAuthorized($user = null){ 49 50 51 return true; 52 } 53 54 55 56}

ユーザー情報(eafa7f257aa93ed8ab61149224b7744e.png)

##参考にしたサイト
Cookbook
Maromaroさん
J.Matsuzakiさん
Teratailの質問
Teratailの質問2

##試したこと
・passwordのハッシュ化で文字数制限があると通らないという話を聞いて
→DB作成時から255文字の制限で関係なかった
・AbeAppControllerの'finder' => 'auth',を消す

##開発環境
・mysql 5.6.32
・PHP 5.6.24
・apache 2.2.15
・CakePHP 3.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問