Laravel 版本:Laravel 5.4.30
我遇到一个问题,我的生产代码托管在通过 HTTPS 提供服务的负载均衡器后面的 AWS Elastic Beanstalk 上。当使用内置的 auth 特征和 make:auth 控制器来验证用户登录时,在提交登录表单后,用户将被重定向到:
http://应用程序 URL http://application-url而不是https://应用程序网址/仪表板 https://application-url/dashboard
在 LoginController 中,它应该在登录到 /dashboard 后路由
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/dashboard';
在登录控制器上,当我查看刀片登录模板的源时,我可以看到表单提交到正确的 URL,https://应用程序网址/登录 https://application-url/login.
我使用以下命令在 AppServiceProvider.php 文件中强制使用 HTTPS:
if (!\App::environment('local')) {
\URL::forceScheme('https');
}
一旦用户通过“身份验证”并且浏览器无法解析 http 版本,单击后退按钮后,它们将被发送到正确的 /dashboard 路由。
我还缺少登录表单提交的其他位置吗?
以防万一有人仍然遇到这个问题文档 https://laravel.com/docs/5.6/requests#configuring-trusted-proxies says:
在终止 TLS / SSL 证书的负载均衡器后面运行应用程序时,您可能会注意到您的应用程序有时不会生成 HTTPS 链接。通常,这是因为您的应用程序正在端口 80 上从负载均衡器转发流量,并且不知道它应该生成安全链接。
这基本上是由于请求以未知层的方式传递到您的实例而引起的。
AWS 解决方案
修改信任代理中间件包含在 App\Http\Middleware 中:
// The trusted proxies (array)
protected $proxies = '*';
//The current proxy header mappings (also array)
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)