【问题标题】:Laravel secure routes handling with configLaravel 使用配置处理安全路由
【发布时间】:2017-01-21 22:51:00
【问题描述】:

我在文档中看到对于安全路由 Laravel 提供函数 secure_url 而不是 url 并提供重定向方法

redirect()->secure('/path');

现在这似乎很令人困惑,因为我们需要更改代码来切换协议。最糟糕的是,我们可能需要更改 laravel 中预先构建的 Auth 控制器。

我的问题是,是否有更好的方法可以从配置切换到 https。如果不可能,为什么?如果需要,我们可以 fork laravel 并添加此功能。

【问题讨论】:

  • 我用的不多,但据我所知,如果你已经使用了https 协议(并且 PHP 知道它正在被使用,要么通过 $_SERVER['HTTPS']X-Forwarded-Proto 要么类似的东西),每次你使用重定向/url时,laravel都会使用https。不过,我可能在这件事上错了

标签: php laravel routes laravel-5.3


【解决方案1】:

我为此使用的解决方案是创建一个安全的中间件。它检查请求是否安全。如果不将其重定向到安全的。

首先在你的中间件目录中创建一个中间件

    <?php namespace App\Http\Middleware;

    use Closure;

    class SecureMiddleware {

        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
             if (!$request->secure()) {
                    return redirect()->secure($request->getRequestUri());
                }
            return $next($request);
        }

    }

在你的 Kernel.php 文件中注册它

protected $routeMiddleware = [
        'auth'          => 'App\Http\Middleware\Authenticate',
        'auth.basic'    => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
        'guest'         => 'App\Http\Middleware\RedirectIfAuthenticated',
        'securage'      => 'App\Http\Middleware\SecureMiddleware',
    ];

然后使用路由组来指定您想要安全路由的位置。

Route::group(['middleware' => 'securage'], function() {
/* Routes here */
});

【讨论】:

  • 我也在使用类似的中间件,但这不是开销。我的问题是为什么 laravel 为链接提供了两种不同的功能,即 url 和 secure_url。
  • @anwerjunaid 这些函数正在调用相同的基本函数,例如,secure_url 只是在最后一个参数($secure) 为 true 的情况下调用 url(),因此您可以在 $secure 为 true 的情况下调用 url()
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 2017-08-29
  • 2017-08-21
  • 2013-05-28
  • 2015-01-10
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多