Laravel 5.1本地环境中的SSL

5

我正在将我的工作项目迁移到Laravel。在订单处理过程中,我使用SSL证书。

购物车、订单地址、订单支付和订单结果是订单处理的四个步骤。

我的第一个问题是:“在本地主机上禁用SSL证书的最佳实践是什么?”

如果我的代码(如下所示)不错,“我该如何缩短它?”因为我一直在重复自己,所以我不喜欢。

/**
 * Disable ssl in Localhost
 */
if (App::environment('local')) {
    Route::get('/cart', [
        'uses' => 'CartController@index',
        'as'   => 'cart',
    ]);
    Route::get('/orderAddress', [
        'uses' => 'AddressController@orderIndex',
        'as'   => 'orderAddress',
    ]);
    Route::get('/orderPayment', [
        'uses' => 'PaymentController@orderPayment',
        'as'   => 'orderPayment',
    ]);
    Route::get('/orderResult', [
        'uses' => 'OrderController@orderResult',
        'as'   => 'orderResult',
    ]);
} else {
/**
 * SSL PAGES
 */
Route::group(['before' => 'force.ssl'], function()
{
    Route::get('/cart', [
        'uses' => 'CartController@index',
        'as'   => 'cart',
    ]);
    Route::get('/orderAddress', [
        'uses' => 'AddressController@orderIndex',
        'as'   => 'orderAddress',
    ]);
    Route::get('/orderPayment', [
        'uses' => 'PaymentController@orderPayment',
        'as'   => 'orderPayment',
    ]);
    Route::get('/orderResult', [
        'uses' => 'OrderController@orderResult',
        'as'   => 'orderResult',
    ]);
});

Route::filter('force.ssl', function()
{
    if( ! Request::secure())
    {
        return Redirect::secure(Request::path());
    }

});

你可以将本地测试放入过滤器中并始终应用它。 - aprovent
我的第一个问题是,在本地主机上禁用SSL证书的最佳实践是什么?这是开始的正确问题吗?我宁愿说,为您的本地测试域发出自签名证书,并让您的测试浏览器接受它。在开发设置中尽可能模拟生产设置始终是一个好主意。 - CBroe
@CBroe,你说得对。但是我现在有一个电子商务系统,并且正在使用中。现在我决定将其转换为Laravel项目。我没有太多时间。而且我对测试域上的自签名证书一无所知。你能分享给我一个链接吗?我想学习一下。谢谢。 - Cihan Küsmez
那应该很容易研究,https://www.google.com/search?q=create+self-signed+ssl+certificate 以及如何设置本地服务器的SSL/HTTPS。 - CBroe
1个回答

4
您可以编写一个类似于中间件的东西,例如:
namespace App\Http\Middleware;

use Closure;
use App;
use Redirect;

class UseSSL
{

    public function handle($request, Closure $next)
    {
        if( App::environment('local') ){
            return Redirect::secure($request->path());
        }

        return $next($request);
    }
}

然后在Kernel.php中注册它。

protected $routeMiddleware = [
    ...
    'use.ssl' => UseSSL::class
];

现在你可以说:
Route::group(['middleware' => 'use.ssl'], function () {

    Route::get('/cart', [
        'uses' => 'CartController@index',
        'as'   => 'cart',
    ]);
    Route::get('/orderAddress', [
        'uses' => 'AddressController@orderIndex',
        'as'   => 'orderAddress',
    ]);
    Route::get('/orderPayment', [
        'uses' => 'PaymentController@orderPayment',
        'as'   => 'orderPayment',
    ]);
    Route::get('/orderResult', [
        'uses' => 'OrderController@orderResult',
        'as'   => 'orderResult',
    ]);
});

请告诉我它是否有效!:)

它完美地运行。存在一些小问题。我编辑了你的帖子。如果你确认它非常好,那就没问题了。 - Cihan Küsmez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接