Laravel 5强制HTTPS问题,登录路由到HTTP

Sha*_*ges 1 php amazon-web-services laravel-5

Laravel版本:Laravel 5.4.30

我遇到了一个问题,即我的生产代码托管在通过HTTPS提供的负载均衡器后面的AWS Elastic Beanstalk上.当使用内置的auth trait和make:auth控制器来验证用户登录时,在登录表单提交时,用户被重定向到:

http:// application-url而不是https:// application-url/dashboard

在LoginController中,它应该在登录到/ dashboard后进行路由

 /**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/dashboard';
Run Code Online (Sandbox Code Playgroud)

在登录控制器上,当我查看刀片登录模板的来源时,我可以看到表单提交到正确的URL,https:// application-url/login.

我使用以下命令在AppServiceProvider.php文件中强制HTTPS:

    if (!\App::environment('local')) {
        \URL::forceScheme('https');
    }
Run Code Online (Sandbox Code Playgroud)

一旦用户进行了"身份验证"并且浏览器无法解析http版本,单击后退按钮就会将其发送到正确的/仪表板路径.

登录表单提交时是否有其他位置我错过了?

Car*_*_E. 8

万一有人还在讨论这个问题,文档说:

在终止TLS/SSL证书的负载均衡器后面运行应用程序时,您可能会注意到您的应用程序有时不会生成HTTPS链接.通常这是因为您的应用程序正在从端口80上的负载均衡器转发流量,并且不知道它应该生成安全链接.

它基本上是由一个请求传递到您的实例的未知层的请求引起的.

AWS的解决方案

修改App\Http\Middleware中包含的TrustProxies中间件:

// The trusted proxies (array)
protected $proxies = '*';

//The current proxy header mappings (also array)
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB; 
Run Code Online (Sandbox Code Playgroud)