テンプレート
<form
action="{{ action('ApplicationController@store') }}"
method="post">
...
</form>
コントローラ
class ApplicationController extends Controller
{
public function store(Request $request)
{
...
...
return redirect('https://hoge.com/form/');
}
}
action部分には、store()で設定している「https://hoge.com/form/」に相当するURIが入力されるはずなんですが、いざフォームを表示してみるとこんな感じになっています。
表示されるHTML
<form
action="http://hoge.com/form/"
method="post">
...
</form>
ページ自体は「https://hoge.com/form/」である一方、フォームの送信先が「http://hoge.com/form/」となっておりhttpsにならないので、Chromeに「安全ではない」と怒られてしまいます。毎回そうというわけではないんですが、なぜか時々これ起きるんですよね。なぜなのか。他でも同じように書いているはずなんですけど。
解決策:常にhttpsを使うようにしましょう
AWSで設定してすべてのサイトがhttps化されているので、すべてhttpsで問題ありません。またプロキシの設定では解決しませんでした。というわけで、AppServiceProvider.phpに以下を記述します。laravel/app/Providers/AppServiceProvider.php
class AppServiceProvider extends ServiceProvider
{
...
...
public function boot()
{
\URL::forceScheme('https');
}
}
これで生成されるURLが全部httpsになります。
自分の開発環境ではローカルでの開発時にはhttp接続しているので、本番環境でだけこの設定を使うようにしておきます。
class AppServiceProvider extends ServiceProvider
{
...
...
public function boot()
{
if(env('APP_ENV') === 'production') {
\URL::forceScheme('https');
}
}
}