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

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

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

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

2388閲覧

localhost でリダイレクトが繰り返し行われる。cakephp3 prefix routing

nishina_1023

総合スコア3

CakePHP

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/10/23 11:17

編集2020/10/23 11:19

前提・実現したいこと

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 でリダイレクトが繰り返し行われました。」と表示されます。

試したこと

  1. Admin/AppControllerに'loginAction'、'loginRedirect'、'logoutRedirect'の追加
  2. config/routes.phpに/adminのフォルダの追加
  3. 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

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

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

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

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

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

guest

回答1

0

ベストアンサー

TopController\App\Controller\AppController を継承していませんか?
App\Controller\AppControllerで定義されている設定で認証をチェックしてしまい、ログインしていないと判定されているかと思います。

\App\Controller\Admin\AppControllerを継承するようにしてください。

投稿2020/10/23 13:12

nojimage

総合スコア957

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

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

nishina_1023

2020/10/23 13:31

use App\Controller\AppController; を use \App\Controller\Admin\AppController に変更したところ動作しました。 Controller\AppControllerを読み込んでいたようでした。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問