作成日: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でサービス実装後に別サービス追加 - 使い回す箇所が多い場合はコッチのほうが良いと思う。