Oops!!VFS connection does not exist

AWSのCloud9のプレビューで「Oops VFS connection does not exist」と画面に表示された時の対処法を紹介します。

私がこの問題に遭遇した時は、Laravel(version=6.20.27)でアプリケーションにログイン機能を実装してプレビューを見ようとした時でした。

デフォルトでは、viewsのwelcome.blade.phpが表示されます。右上にLOGINとREGISTERが表示されています。

LOGINとクリックすると

REGISTERも同様です。

原因

調べると同様な問題に困っている記事がありました。どうやら、Laravelアプリが生成するリンクのURLがhttpsではなくhttpになってしまうことで色々な不具合があるそうです。

URLに/loginとするとログイン画面が表示されますが、

と表示が変になります。本来は以下のようになります。

ログイン画面でGoogle chromeのデベロッパーツールで確認します。

Google ChromeのデベロッパーツールのConsole欄をみるとhttp通信が問題であるとわかります。

The page at ‘https://……’ was loaded over HTTPS, but requested an insecure script ‘https://……’. This request has been blocked; the content must be served over HTTPS.

日本語訳すると

ページはHTTPS経由で読み込まれましたが、安全でないスクリプトをリクエストしました。 このリクエストはブロックされました。 コンテンツはHTTPS経由で提供する必要があります。

解決方法

App/Http/Middleware/TrustProxies.phpの TrustProxiesクラス proxiesプロパティに ’**’ あるいは’*’ をセットすると解決するようです。Laravel 5.5 の場合は’**’でLaravel 6.x の場合は’*’です。

<?php
namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string
     */
    protected $proxies="*";
    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

もう一つの方法としてapp/Providers/AppServiceProvider.phpのAppServiceProviderクラスのbootメソッドに以下のように記述します。

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->app['request']->server->set('HTTPS','on');
    }
}

まとめ

Oops!!VFS connection does not existがでたらHTTPSにする。