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

Vapor 4集成Sign in with Apple遇JSON格式错误求助

Vapor 4 Apple登录验证报错排查建议

问题描述

在Vapor 4中实现Sign in with Apple功能时,无论将用户token放在请求体还是请求头(Bearer)中,调用API均返回JSON解析错误:

{
    "error": true,
    "reason": "Data corrupted at path ''. The given data was not valid JSON. Underlying error: Error Domain=NSCocoaErrorDomain Code=3840 \"Invalid value around line 1, column 0.\" UserInfo={NSDebugDescription=Invalid value around line 1, column 0., NSJSONSerializationErrorIndex=0}."
}

两种实现代码

1. Token放在请求体的实现

func SignInWithApple(req: Request)async throws -> Token{
    // 解析请求体成功
    let data = try req.content.decode(SignInWithAppleToken.self)
    // iOS应用的Bundle ID
    guard let appIdentifier = Environment.get("ios_app_id") else{
        throw Abort(.internalServerError)
    }
    // 错误发生在此行
    let siwaToken = try await req.jwt.apple.verify(data.token, applicationIdentifier: appIdentifier)
    print(siwaToken)

// 剩余业务逻辑
}

2. Token放在请求头(Bearer)的实现

func routes(_ app: Application) throws {
 app.jwt.apple.applicationIdentifier = "iOS_app_bundle_Id"
    app.get("apple") { req async throws -> HTTPStatus in
        let token = try await req.jwt.apple.verify()
        print(token) // AppleIdentityToken
        return .ok
    }
}

Postman请求方式

1. 请求体传参

请求体传参

2. 请求头(Bearer)传参

请求头传参

解决建议

  • 确认请求内容类型:Postman请求需将Content-Type设置为application/json,请求体的JSON格式要严格规范,不能有多余空格或语法错误。
  • 校验Token格式:确保传入的token是完整的JWT字符串(由header、payload、signature三部分通过.分隔组成),避免复制时遗漏字符或引入多余符号。
  • 修正应用标识符配置:applicationIdentifier需设置为Team ID + Bundle ID的完整组合(例如ABCDE12345.com.yourcompany.yourapp),而非单纯的Bundle ID,Apple验证时要求使用完整标识符。
  • 添加详细错误捕获:在verify方法调用处增加错误分支,区分JWT验证错误与JSON解析错误,便于定位问题:
    do {
        let siwaToken = try await req.jwt.apple.verify(data.token, applicationIdentifier: appIdentifier)
        print(siwaToken)
    } catch let error as JWTError {
        print("JWT验证错误:\(error)")
        throw error
    } catch {
        print("其他错误:\(error)")
        throw error
    }
    
  • 检查环境变量:第一种实现中,确认ios_app_id环境变量已正确配置,值为完整的Apple应用标识符,避免空值导致验证逻辑异常。
  • 注意GET请求规范:第二种实现使用GET请求,GET请求通常不携带请求体;测试Bearer头时,确保Authorization头格式为Bearer <完整token>,无多余空格或拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:23:00