我只想在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
答案 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]);