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

如何让Aqueduct服务器返回Refresh Token?

解决Aqueduct AuthController不返回Refresh Token的问题

我之前也碰到过一模一样的情况,其实Aqueduct的AuthServer返回refresh token是有明确前置条件的,咱们一步步来排查解决:

1. 先确认你用的授权类型(Grant Type)

只有当请求/auth/token时使用**password或者authorization_code**这两种授权类型,AuthServer才会自动生成并返回refresh token。如果你的请求用的是client_credentials类型,那确实不会返回——因为这种模式下不需要刷新token。

你可以检查一下请求参数,确保grant_type的值是password,同时带上正确的username和password参数,比如用form-data提交:

grant_type: password
username: 你的用户名
password: 你的密码

2. 检查你的User模型是否正确继承了ManagedAuthResourceOwner

这是很容易忽略的点:你的User类必须继承自ManagedAuthResourceOwner,而不是普通的ManagedObject。这个父类内置了和授权相关的字段(比如refresh token的关联存储)以及逻辑,没有它的话,AuthServer根本没法生成refresh token。

正确的User类写法应该是这样的:

class User extends ManagedAuthResourceOwner<_User> {
  @override
  @Serialize(input: true, output: false)
  String password;
}

class _User extends ManagedAuthResourceOwnerTable {}

3. 如果用了客户端认证,检查客户端的配置

如果你的请求里还带了client_id和client_secret,那要确保数据库里对应的客户端记录开启了refresh token权限。创建客户端的时候,需要把allowRefreshTokens设为true(默认可能是false):

final client = AuthClient()
  ..clientID = "你的客户端ID"
  ..secret = "你的客户端密钥"
  ..allowRefreshTokens = true; // 这个配置必须有
await context.insertObject(client);

4. (可选)自定义AuthController确认响应

如果上面几步都没问题还是不返回,你可以临时自定义一个AuthController,看看响应的生成过程:

class CustomAuthController extends AuthController {
  CustomAuthController(AuthServer server) : super(server);

  @override
  Future<Response> handle(Request request) async {
    final response = await super.handle(request);
    // 这里可以打印响应内容,确认是否有refresh_token
    print("Auth response: ${response.body}");
    return response;
  }
}

然后把路由里的AuthController换成这个自定义的,看看日志里的响应内容——不过正常情况下,满足前面三个条件的话,这里应该能看到refresh token。

总的来说,最常见的问题就是授权类型不对,或者User模型没继承对。先检查这两点,大概率就能解决问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:43:45