【问题标题】:Make only two routes with https protocol in Laravel 5.3在 Laravel 5.3 中只使用 https 协议创建两条路由
【发布时间】:2016-10-27 15:56:45
【问题描述】:

我只想要 https 中的付款结帐页面。我在 http:// 有一个网站,我正在使用 Stripe 信用卡实现付款结账,但 Stripe 仅适用于 https...

我希望我的所有网站都有 http,除了 /payment-date 页面和 payment-data-post 页面,以使用安全协议将数据发送到 Stripe。

我如何才能在 https 上只有这两个页面?

路线是:

Route::get('/payment-data',['as'=> 'payment_data','uses' => 'WebController@getPaymentData']);

Route::post('/post-payment-data', ['as'  => 'post_payment_data', 'uses' => 'WebController@postPaymentData']);

我只想要 https 中的这条路线

框架是 Laravel 5.3

【问题讨论】:

标签: php laravel laravel-5 laravel-5.2 stripe-payments


【解决方案1】:

我认为一个好的做法是创建一个中间件,然后您可以在任何您喜欢的路线上使用它。

使用终端,导航到项目的根目录并发出以下工匠命令(创建 ForceHttpProtocol 中间件)

php artisan make:middleware ForceHttpProtocol

更改新创建的 /app/Http/Middleware/ForceHttpProtocol.php 使其看起来像这样(仅适用于生产环境):

<?php

namespace App\Http\Middleware;

use Closure;

class ForceHttpProtocol {

    public function handle($request, Closure $next) {

        if (!$request->secure() && env('APP_ENV') === 'pro') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }

}

下一步是通过添加 'App\Http\Middleware\ForceHttpProtocol' 来更新 /app/Http/Kernel.php,这将使 Laravel 了解您的自定义中间件。


如果您只想在特定路由上应用中间件,您只需通过向 $routeMiddleware 数组添加 'App\Http\Middleware\ForceHttpProtocol' 指令来将中间件分配给路由。

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    ...
    'forceSSL' => App\Http\Middleware\ForceHttpProtocol::class,

];

只需按照习惯使用新创建的中间件即可:

Route::get('payment-date', ['middleware' => 'forceSSL', function()
{
   // do stuff
}]);

应该是这样的!

【讨论】:

  • 好的,我试试这段代码,创建路由组不是更好吗?像这样Route::group(['middleware' =&gt; ['web','forceSSL']], function () { Route::get('/payment-data',['as'=&gt; 'payment_data','uses' =&gt; 'WebController@getPaymentData']); Route::post('/post-payment-data', ['as' =&gt; 'post_payment_data', 'uses' =&gt; 'WebController@postPaymentData']); }
  • 当然,你可以使用一个路由组,然后应用你想要的中间件。
【解决方案2】:

您可以在声明路由时通过传递 ['http' => true] 或 ['https' => true] 作为选项来指定路由应该是 HTTP 还是 HTTPS,如果您不指定这些选项,那么它应该只需使用与您当前访问页面相同的协议即可。

Route::post('/form', ['uses' => 'FormController@postForm', 'https' => true]);

【讨论】:

  • 嗯,这在 Laravel 5.3 中有效吗?人们说不工作
猜你喜欢
  • 2017-05-25
  • 2023-03-26
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2017-01-25
  • 2017-08-10
  • 2017-02-11
相关资源
最近更新 更多