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

如何从ContentResponse同时返回accessToken与refreshToken两个字符串?

问题

当前代码仅返回ContentResponse中的accessToken字符串,代码如下:

return body.encodeResponse(for: request)
     .map { $0.body.buffer }
     .flatMap { buffer in
             return request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer }
     }.flatMapThrowing { response in
             return try response.content.get(ContentResponse.self)
     }.map { $0.accessToken }

该返回值在如下完成处理程序中接收:

return try self.fetchToken(from: request).flatMap { accessToken in

需要修改代码,以同时返回ContentResponse中的accessToken和refreshToken两个字符串,求结构修改方案。

解决方案

可以通过返回元组或自定义结构体的方式同时携带两个token,具体修改如下:

方案一:使用元组(轻量快捷)

  1. 修改fetchToken的返回映射逻辑
    把最后一步返回单个accessToken的逻辑,改成返回包含两个token的元组:
return body.encodeResponse(for: request)
     .map { $0.body.buffer }
     .flatMap { buffer in
             return request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer }
     }.flatMapThrowing { response in
             return try response.content.get(ContentResponse.self)
     }.map { ($0.accessToken, $0.refreshToken) } // 返回(accessToken, refreshToken)元组
  1. 修改接收处的代码
    在调用fetchToken的地方,通过元组解构直接获取两个token:
return try self.fetchToken(from: request).flatMap { (accessToken, refreshToken) in
    // 此处可直接使用accessToken和refreshToken做后续处理
}

方案二:使用自定义结构体(可读性更强)

如果需要更清晰的语义,可自定义结构体封装两个token:

  1. 定义封装结构体
struct TokenPair: Codable {
    let accessToken: String
    let refreshToken: String
}
  1. 修改fetchToken的返回映射逻辑
return body.encodeResponse(for: request)
     .map { $0.body.buffer }
     .flatMap { buffer in
             return request.client.post(url, headers: self.callbackHeaders) { $0.body = buffer }
     }.flatMapThrowing { response in
             return try response.content.get(ContentResponse.self)
     }.map { content in
         TokenPair(accessToken: content.accessToken, refreshToken: content.refreshToken)
     }
  1. 修改接收处的代码
return try self.fetchToken(from: request).flatMap { tokenPair in
    let accessToken = tokenPair.accessToken
    let refreshToken = tokenPair.refreshToken
    // 业务逻辑处理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:50