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

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

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

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

Q&A

解決済

1回答

695閲覧

Cakephp3.6 ログインしていなくてもページが見れるようにしたい

nnahito

総合スコア2004

CakePHP

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

0グッド

0クリップ

投稿2018/05/29 12:38

環境

  • Cakephp3.6
  • PHP7.2

やりたいこと

作品のダウンロードページを作りたいが、
ログインしないと作品はダウンロードできないようにしたい。
この時、ダウンロードボタンのあるページまではログインしていなくてもアクセスでき、
ダウンロードボタン押下時にログインしていなければログインページ遷移させたい。

Amazonの商品ページや、以下のサイトのような感じ。
https://www.creative-tim.com/product/paper-dashboard

ちなみに、複数サービス間でユーザ情報を共有したいので、
認証基盤はAuth0を使っています。
なので、メールアドレスやアクセストークンは取得できますが、パスワードは取得できません。

やったこと

を参考にコードを作成しましたが、

php

1$this->loadComponent('Auth', []);

/src/Controller/AppController.phpに記載した時点で、ログインページ以外アクセスできなくなりました。

php

1$this->Auth->allow(['メソッド', 'メソッド']);

の様にすれば回避できると思いますが、全メソッドを追加していくしかないのでしょうか?

検索して出てきた別方法としては、
https://sam-c.co.jp/cakephp-simple-auth/
のように、レガシーにアクセストークンか何かをセッションに書き込んでいく……という手法をとるしかないのでしょうか?

ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHPDOC 抜粋

* or to allow all actions * ``` * $this->Auth->allow();

全部のアクションに適用するなら何も書くなとのこと

投稿2018/05/29 13:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nnahito

2018/05/30 01:14

ありがとうございます! PHPDoc……確かにそれは見てませんでした。 以下のように記述したのですが、Fatal errorが出てしまいます…… ========================== public function beforeFilter(Event $event) { $this->Auth->allow(); } ========================== Fatal error: [Error] Call to a member function allow() on boolean ======================================== もしかしたらまだ全部組み終わってないからかもしれませんので、 ひとまず途中報告ですが…
退会済みユーザー

退会済みユーザー

2018/05/30 01:35

AuthComponent をロードするときに別クラスで読み込んでる場合は実装自体が別物になってることも普通なので読み込んでるクラスで確認してください
nnahito

2018/05/30 01:39

ご返信有難うございます。 > AuthComponent をロードするときに別クラスで読み込んでる場合は実装自体が別物になってることも普通 こちらなのですが、ちょっと意図がわからず…… 「$this->loadComponent('Auth'」をしているのはAppControllerでやっております。
退会済みユーザー

退会済みユーザー

2018/05/30 01:42

いやw $this->loadComponent の第二引数で別物に差し替える指定してる場合もあるから
nnahito

2018/05/30 01:52

ご返信誠にありがとうございます。 > $this->loadComponent の第二引数で別物に差し替える指定してる場合もあるから こちら、今新規で作っているので誰かのものを差し替えている……ということはないのですが…… あれ?私、認識あってます……?
退会済みユーザー

退会済みユーザー

2018/05/30 01:56

className を設定してたり App\Controller\Component\AuthComponent が実装されてたり etc.. いくつかの方法で標準クラス以外を使う方法があるのだよ
nnahito

2018/05/30 06:31

ご返信ありがとうございます! なるほど、作っていてなんとなくわかってきました! いつも本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問