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

Laravel 9 API对接CodeIgniter前端实现验证码验证方案咨询

解决方案

针对Laravel 9 API使用mews/captcha时因CSRF令牌导致验证失败的问题,推荐采用无状态验证码验证方案,具体步骤如下:

1. 调整mews/captcha配置

首先发布扩展的配置文件:

php artisan vendor:publish --provider="Mews\Captcha\CaptchaServiceProvider"

打开config/captcha.php,新增一个适用于API的配置项(或修改默认配置),使用request驱动替代默认的session驱动:

'api' => [
    'length' => 5,
    'width' => 120,
    'height' => 36,
    'quality' => 90,
    'math' => false,
    'expire' => 60, // 验证码有效期(秒)
    'driver' => 'request', // 无状态驱动,依赖缓存存储验证码数据
],

2. 编写API验证码生成接口

在Laravel的API控制器中添加生成验证码的方法,返回验证码图片(base64格式)和对应的验证密钥:

use Mews\Captcha\Facades\Captcha;

public function generateCaptcha()
{
    $captcha = Captcha::create('api');
    return response()->json([
        'captcha_image' => $captcha->inline(), // 返回base64图片,前端可直接渲染
        'captcha_key' => $captcha->key // 验证时需要传递的密钥
    ]);
}

3. 前端CodeIgniter处理

前端调用上述接口获取captcha_image和captcha_key:

  • 渲染captcha_image给用户输入
  • 登录时将username、password、用户输入的captcha以及captcha_key一起发送到Laravel API

4. 修改验证规则

在登录接口的验证逻辑中,使用captcha_api规则并传入captcha_key进行验证:

$validator = Validator::make($request->all(), [
    'username' => 'required',
    'password' => 'required',
    'captcha' => 'required|captcha_api:' . $request->captcha_key
]);

if ($validator->fails()) {
    return response()->json(['errors' => $validator->errors()], 422);
}

备选方案(不推荐)

如果坚持使用session驱动,可在CSRF中间件中排除API路由,同时处理跨域session传递:

  1. 修改app/Http/Middleware/VerifyCsrfToken.php:
protected $except = [
    '/api/*', // 替换为你的API路由前缀
];
  1. 配置CORS允许携带Cookie,前端请求时需设置withCredentials: true(仅适用于同域或信任的跨域场景,不符合RESTful无状态设计)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:31:40