在Laravel 5.3中只使用https协议制作两条路由

时间:2016-10-27 06:59:00

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

我只想在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

2 个答案:

答案 0 :(得分:1)

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

使用终端,导航到项目的根目录并发出以下artisan命令(以创建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了解您的自定义中间件。

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

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

];

只需使用新创建的中间件:

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

那应该是它!

答案 1 :(得分:0)

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

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