发现个问题,Laravel-admin 上线安装了 ssl, 强制跳转 https 之后,就无法登录了

发现个问题,laravel-admin上线安装了SSL,强制https跳转之后,就无法登录了,一直跳到登录页面。
大家有发现这个问题吗?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

关于laravel-admin ssl,需要在config/admin.php配置文件中,'https' => env('ADMIN_HTTPS', false),改为true即可,或者在.env中添加ADMIN_HTTPS=true

3年前 评论
// 文件 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'],
    ],
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!