You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 API针对特定IP绕过auth:api中间件并自动登录指定用户

实现特定IP自动登录绕过API认证的方案

步骤1:创建自定义中间件

首先生成处理IP判断和自动登录的中间件:

php artisan make:middleware AutoLoginByIp

步骤2:编写中间件逻辑

打开app/Http/Middleware/AutoLoginByIp.php,替换为以下代码:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use App\Models\User;

class AutoLoginByIp
{
    public function handle($request, Closure $next)
    {
        // 配置允许自动登录的IP和目标用户ID
        $allowedIp = '192.168.1.100'; // 替换为你的目标IP
        $targetUserId = 1; // 替换为需要自动登录的用户ID

        // 获取客户端真实IP(反向代理环境需额外配置,见下文)
        $clientIp = $request->ip();

        if ($clientIp === $allowedIp) {
            $user = User::find($targetUserId);
            if ($user) {
                // 使用API guard登录指定用户,让后续auth:api中间件认为已认证
                Auth::guard('api')->login($user);
            }
        }

        return $next($request);
    }
}

如果需要支持多个IP,把$allowedIp改成数组,用in_array判断:

$allowedIps = ['192.168.1.100', '10.0.0.5'];
if (in_array($clientIp, $allowedIps)) {
    // 执行登录逻辑
}

步骤3:注册中间件

打开app/Http/Kernel.php,在$routeMiddleware数组中添加新中间件:

protected $routeMiddleware = [
    // ... 其他已存在的中间件
    'auto.login.by.ip' => \App\Http\Middleware\AutoLoginByIp::class,
];

步骤4:调整路由中间件顺序

把自定义中间件放在auth:api前面,确保自动登录逻辑先执行:

Route::group(['middleware' => ['auto.login.by.ip', 'auth:api', 'StripScript'], 'prefix' => 'v1'], function(){
    Route::get('/list', [ListController::class, 'list']);
});

反向代理环境的IP获取说明

如果你的服务器使用了Nginx、Apache等反向代理,需要配置Laravel信任代理,才能拿到真实客户端IP:

  1. 打开app/Http/Middleware/TrustProxies.php,修改$proxies为你的代理IP,或者设置为'*'(生产环境不建议用*,需指定具体代理IP):
protected $proxies = '*';
  1. 或者在.env文件中添加:
TRUST_PROXIES=*

这样当指定IP的请求进来时,中间件会自动登录指定用户,后续的auth:api中间件会检测到已认证的用户,从而绕过token验证。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:00:55