讨论数量:
关于laravel-admin ssl,需要在config/admin.php配置文件中,'https' => env('ADMIN_HTTPS', false),改为true即可,或者在.env中添加ADMIN_HTTPS=true
// 文件 vendor\encore\laravel-admin\src\helpers.php 中的 admin_url 方法
if (!function_exists('admin_url')) {
/**
* Get admin url.
*
* @param string $path
* @param mixed $parameters
* @param bool $secure
*
* @return string
*/
function admin_url($path = '', $parameters = [], $secure = null)
{
if (\Illuminate\Support\Facades\URL::isValidUrl($path)) {
return $path;
}
$secure = $secure ?: (config('admin.https') || config('admin.secure'));
return url(admin_base_path($path), $parameters, $secure);
}
}
添加Middleware 修改 config(‘admin.secure’) 使 admin_url方法兼容 http和https
修改后还需要关闭admin的operation_log 修改 config\admin.php 中 operation_log = [‘enable’ => false,…], 原因:
// 文件 vendor\encore\laravel-admin\src\Middleware\LogOperation.php
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle(Request $request, \Closure $next)
{
if ($this->shouldLogOperation($request)) {
// 下面一行的\Illuminate\Http\Request::HEADER_X_FORWARDED_FOR 会覆盖自己配置的TrustProxies里面的headers,所以关闭log,如果需要开启log,可以搜索如何自定义log即可,不过继承这个类的时候需要重写这个方法,把下面一行注释了
$setProxy = $request->setTrustedProxies(request()->getClientIps(), \Illuminate\Http\Request::HEADER_X_FORWARDED_FOR);
$log = [
'user_id' => Admin::user()->id,
'path' => substr($request->path(), 0, 255),
'method' => $request->method(),
'ip' => $request->getClientIp(),
'input' => json_encode($request->input()),
];
try {
OperationLogModel::create($log);
} catch (\Exception $exception) {
// pass
}
}
return $next($request);
}
目前我用的是下面方法
// 文件 App\Admin\Middleware\AdminSecure.php
<?php
namespace App\Admin\Middleware;
use Closure;
use Illuminate\Http\Request;
class AdminSecure
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
config(['admin.secure' => $request->secure()]);
return $next($request);
}
}
// 文件 App\Http\Kernel.php
// $routeMiddleware 中加入 'admin.secure' => \App\Admin\Middleware\AdminSecure::class,
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// 添加下面中间件
'admin.secure' => \App\Admin\Middleware\AdminSecure::class,
];
// 文件 config/admin.php
// $route['middleware'] 中加入 'admin.secure'
/*
|--------------------------------------------------------------------------
| Laravel-admin route settings
|--------------------------------------------------------------------------
|
| The routing configuration of the admin page, including the path prefix,
| the controller namespace, and the default middleware. If you want to
| access through the root path, just set the prefix to empty string.
|
*/
'route' => [
'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
'namespace' => 'App\\Admin\\Controllers',
// 下面加入 'admin.secure'
'middleware' => ['web', 'admin', 'admin.secure'],
],
推荐文章: