前提・実現したいこと
http://localhost/myapp/admin/login/login にアクセスし、
ログイン後、http://localhost/myapp/admin/top/index にリダイレクトさせたいです。
また、ログイン中なら、
http://localhost/myapp/admin/login/login にアクセスした時、
http://localhost/myapp/admin/top/index にリダイレクトさせる処理を実装したいです。
フォルダ構成
※adminフォルダを追加し、prefixルーティングの設定を行っております。
Controller/
├AppControler
admin/
├AppControler
├LoginController
├TopController
Template/
admin/
├Login
├Top
発生している問題・エラーメッセージ
ログインをした際、http://localhost/myapp/admin/top/index にリダイレクトされるのですが、
「localhost でリダイレクトが繰り返し行われました。」と表示されます。
試したこと
- Admin/AppControllerに'loginAction'、'loginRedirect'、'logoutRedirect'の追加
- config/routes.phpに/adminのフォルダの追加
- chrome、edge等、他のブラウザで確認
該当のソースコード
Admin/AppController
public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler', [ 'enableBeforeRedirect' => false, ]); $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'loginAction' => [ 'controller' => 'Login', 'action' => 'login' ], 'loginRedirect' => [ 'controller' => 'Top', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Login', 'action' => 'login' ], 'authenticate' => [ 'Form' => [ 'userModel' => 'UsersAdmin', 'fields' => [ 'username' => 'login_id', 'password' => 'password' ], 'finder' => 'auth' ] ], 'storage' => [ 'className' => 'Session', 'key' => 'Auth.Admin', ], 'authError' => __('もう1度ログインしてください。') ]); }
config/routes.php
// 管理サイト認証 Router::prefix('admin', function (RouteBuilder $routes) { $routes->fallbacks(DashedRoute::class); });
admin/LoginController.php
<?php namespace App\Controller\Admin; use Cake\ORM\TableRegistry; use Cake\Auth\DefaultPasswordHasher; use \Exception; use Cake\Event\Event; use Cake\Utility\Security; class LoginController extends AppController { public function beforeFilter(Event $event) { parent::initialize(); $this->Auth->allow(['logout']); } public function login(){ $this->viewBuilder()->setLayout('login_layout'); $user = $this->Auth->user(); if(isset($user)){ return $this->redirect($this->Auth->redirectUrl()); } 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(__('IDまたはパスワードが違います')); return $this->redirect($this->Auth->logout()); } } } public function logout() { $this->request->session()->destroy(); $this->Flash->success('ログアウトしました'); return $this->redirect($this->Auth->logout()); } } ?> admin/TopController.php
<?php namespace App\Controller\Admin; use \Exception; use App\Controller\AppController; use Cake\Event\Event; use Cake\Core\Configure; class TopController extends AppController { public function index() { } } ?>
admin/Login/login.ctp
<h1>ログイン画面</h1> <?= $this->Form->create();?> <?= $this->Form->control('login_id',['type'=>'text','label'=>__('Login ID'),'id' => 'login_id', "maxlength"=>"255"]);?> <?= $this->Form->control('password',['type'=>'password','label'=>__('Password'),'id' => 'password', "maxlength"=>"255"]);?> <?= $this->Form->button('Login');?> <?= $this->Form->end();?>
admin/Top/index.ctp
<h1>トップ画面</h1>
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
cakephp3
php7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/23 13:31