🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CakePHP

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

Q&A

解決済

1回答

1485閲覧

cakeでログインを必要としないページの指定について

tunnel

総合スコア30

CakePHP

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

0グッド

0クリップ

投稿2019/09/26 14:20

Usersのページは下のコードのようにすればいいのは分かるのですが、

php

1//AppController.php 2public function beforeFilter(Event $event) 3 { 4 parent::beforeFilter($event); 5 $this->Auth->allow(['login', 'add', 'index']); 6 }

別のテーブル(Posts,Comments)のページでもログインしないでも入れるようにしたいです。

php

1//AppController.php 2public function beforeFilter(Event $event) 3 { 4 parent::beforeFilter($event); 5 $this->Auth->allow(['controller'=>'Users', 'action'=>['login', 'add', 'index']]); 6 }

のようにして他のページも指定しようとしたのですが
Warning (2): strtolower() expects parameter 1 to be string, array given [CORE/src/Controller/Component/AuthComponent.php, line 360]
というエラーが出ました。

引数にstrが来ることを想定しているとのことなので下のコードを書き換えればよいということでしょうか?
ご指導のほどよろしくお願いいたします。

php

1//vender/cakephp/cakephp/src/controller/component/AuthComponent.php 2protected function _isAllowed(Controller $controller) 3 { 4 $action = strtolower($controller->getRequest()->getParam('action')); 5 //360行目↓↓↓ 6 return in_array($action, array_map('strtolower', $this->allowedActions)); 7 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

AuthComponent::allow() に指定するのは アクション のリストです。

公開するアクションの作成 | AuthComponent - 3.8

AuthComponent::allow() を呼び出すのは 各コントローラー の beforeFilter または、initialize メソッドで行ってください。
AppControllerではAuthComponentの設定のみを行い、allowメソッドによるアクションの許可は書きません。(AppControllerで行うと全てのコントローラーに反映されるため、意図しない公開に繋がります。

なので、/users, /users/add を認証なしで公開したければ

php

1class UsersController extends AppController 2{ 3 // ... 4 public function beforeFilter(Event $event) 5 { 6 parent::beforeFilter($event); 7 $this->Auth->allow(['add', 'index']); // loginはAuthコンポーネントの設定時に宣言していれば含めなくてもよい 8 } 9 // ... 10}

となります。

また、AuthComponent::allow()を引数なしで呼び出せばそのコントローラーは全て認証なしで公開されますので、PostsControllerのアクション全てを公開したいのであれば

php

1class PostsController extends AppController 2{ 3 // ... 4 public function beforeFilter(Event $event) 5 { 6 parent::beforeFilter($event); 7 $this->Auth->allow(); 8 } 9 // ... 10}

とすればよいです。

投稿2019/09/30 07:25

nojimage

総合スコア959

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

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

tunnel

2019/10/10 10:33

遅れて申し訳ありません。 そういうことだったんですね、非常に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問