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

Swift 5中Moya网络层添加Bearer令牌失败,Laravel后端报错排查

解决Moya请求Laravel后端时"Personal access client not found"错误

这个错误通常来自两个核心原因:请求头的Bearer令牌格式有误,或者Laravel后端的Passport个人访问客户端未正确配置,下面一步步来修复:

1. 修正Moya中的Authorization请求头格式

看你的代码,手动添加Authorization头时写了"Bearer+\(Constant.accesstoken.token)",这里的+是错误的——正确的Bearer令牌格式应该是Bearer (注意空格)加上令牌字符串。而且你已经实现了AccessTokenAuthorizable协议并返回.bearer,Moya本身会自动帮你处理Bearer认证,手动添加反而可能导致头信息冲突。

两种修复方式选其一:

方式一:移除手动添加的Authorization头(推荐)

依赖Moya的自动处理能力,只保留Content-Type即可:

var headers: [String : String]? {
    switch self {
    case .addProperty(_, _, _, _, _, _, _, _, _):
        // 仅保留multipart/form-data类型,Authorization由Moya自动注入
        return ["Content-Type": "multipart/form-data"]
    }
}

同时初始化Provider时,通过AccessTokenPlugin传入令牌:

var provider = MoyaProvider<Service>(plugins: [AccessTokenPlugin(tokenClosure: {
    return Constant.accesstoken.token
})])

方式二:修正手动添加的令牌格式

如果坚持手动添加头信息,把加号换成空格:

return ["Content-Type": "multipart/form-data", "Authorization": "Bearer \(Constant.accesstoken.token)"]

2. 确保Laravel后端创建了个人访问客户端

这个错误是Laravel Passport的典型提示,说明后端还未生成个人访问客户端,按以下步骤操作:

  • 在Laravel项目根目录运行Artisan命令:
    php artisan passport:client --personal
    
  • 命令执行后会生成客户端ID和密钥,将它们配置到项目的.env文件中:
    PASSPORT_PERSONAL_ACCESS_CLIENT_ID=生成的客户端ID
    PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=生成的客户端密钥
    
  • 最后检查config/auth.php中api守卫的驱动是否设置为passport:
    'guards' => [
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
    

完成以上两步后重新测试请求,应该就能解决这个错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:02:38