ラボ > FuelPHP:エラー絡み

fuelPHP BASIC認証絡みの問題

特殊なケースなのだが・・・BASIC認証絡みで面倒なコトになった。

作成日:2018-08-01, 更新日:2018-08-01

エラー内容

[Deprecation] Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked.

調べると「リソースの読み込みのURLにID、PWを含めてはいけない」的な内容。

エラーにいたる経緯

状況

まず、下記のような状況だった。
・複数のURL(ドメインは同じ、ディレクトが異なる)からのアクセスで一つのFuelPHPを利用
・本番用と確認用にサーバは2つ。
・確認用サーバにはBASIC認証を設定

修正

確認用サーバ側のスマホのアプリ絡みで、BASIC認証が都度表示されるようになったとかで・・・BASIC認証をどうにかしなくちゃいけないことになった。

・「BASIC認証を無くす」っていうのはNG
・スマホのアプリ側の修正っていうのもNG(金銭的な大人の事情)
・IP制限はスマホなのでNG(Wifi使ってIP制限っていうのはアリだと思うけど・・・大人の事情でNG)

ということで、FuelPHP側を修正することに。

リンク先などの指定はすべて「\Uri::create(〇〇〇)」を使っている。
このときに生成されるURLBASIC認証を入れた状態に修正することになった。
※最初はBASIC認証が必要だからID・PWを知らない人はそもそも見れない。以降は各ページからリンクを辿るのでひとまずOKという感じ。

→確認用サーバだから、こういう感じでOK。

\Uri::create(〇〇〇)の修正

「\Uri::create(〇〇〇)」は「core/classes/uri.php」にいる。
本来なら・・・「core/classes/uri.php」を継承して、修正して、読み込みを変更して・・・なんだけど確認用サーバなのでcoreを直接修正。

「core/classes/uri.php」の「create()」で「return」の前で「ID:PW@」を付与したURLに変更。

CSSやJSの読み込みの修正

あとはCSSやJSの読み込みのトコは数が少ないので直接修正。

確認

ひとまず成功と思われるけど・・・アプリで確認が出来ないので先方に丸投げ。

数時間後

特定のページでCSSが読み込まれていないことに気付いた。

調べるとエラーがでていた。

[Deprecation] Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked.

全ページで出ているわけじゃないのが原因不明。サーバ側のキャッシュか何かかな?

とりえあえず・・・「core/classes/uri.php」を再度修正。
前回はBASIC認証の情報を埋め込むようにしたけど・・・ドメインを削除して絶対PATHを返すように修正。

リダイレクト時にエラー

今度はログインチェック時にエラーになる・・・と。
調べるとログインチェック後、ログインページや会員ページへ「\Response::redirect(〇〇〇)」を使ってリダイレクトさせている。

本来なら、問題ないんだけど・・・「\Response::redirect(\Uri::create(〇〇〇))」としていた。
※「\Response::redirect(〇〇〇)」は「core/classes/response.php」にいる。

redirect()を見ると・・・「://」が含まれないものは「\Uri::create(〇〇〇)」を実行するとある。

▼今回の「\Response::redirect(\Uri::create(〇〇〇))」の流れ
1.「\Uri::create(〇〇〇)」で絶対PATHを取得
2.「\Response::redirect(〇〇〇)」に渡す
3.「redirect()」の中で「://」が含まれないので「\Uri::create(〇〇〇)」で絶対PATHを取得
4.リダイレクト

私の場合、特殊な状況だったので「3」が困ったコトになっていたので改善。
※特殊な状況:異なるアドレスで一つのFuelPHPを使っていた。

関連項目

一つのサイトでFuelPHPを複数使う(簡略版)
FuelPHPを一つのサイトで複数使いたい
FuelPHPでサービス実装後に別サービス追加 - 使い回す箇所が多い場合はコッチのほうが良いと思う。