Aqueduct - 如何在我的后端保存没有用户 ID 的客户数据

Aqueduct - How to save client data without the user ID in my backend

当我不知道用户的用户 ID 时,如何为用户保存数据?我想将它保存在我的 Aqueduct 后端,以便我可以保护和查询当前用户数据?

@Operation.post()
Future<Response> addData(@Bind.body(ignore: ['id']) Data newData) async {
  final query = Query<Data>(context)..values = newData;
  final insertData = await query.insert();
  return Response.ok(insertData);
}

当您创建新用户时,Aqueduct 会自动生成一个用户 ID。该 ID 与用户的登录凭据或访问令牌相关联。

在您的示例中,用户在数据模型中传入了一些数据:

@Operation.post()
Future<Response> addData(@Bind.body(ignore: ['id']) Data newData) async {
  final query = Query<Data>(context)..values = newData;
  final insertData = await query.insert();
  return Response.ok(insertData);
}

问题是用户不知道自己的 ID,所以 newData 中没有。

假设你有路由protected with an Authorizer,那么你可以这样获取用户ID:

final userID = request.authorization.ownerID;

所以你可以这样使用它:

@Operation.post()
Future<Response> addData(@Bind.body(ignore: ['id']) Data newData) async {

  final userID = request.authorization.ownerID;

  final query = Query<Data>(context)
    ..values.id = userId
    ..values.something = newData.something
    ..values.another = newData.another;

  final insertData = await query.insert();
  // if insert was successful then...
  return Response.ok(insertData);
}

顺便说一句,由于您要将插入的数据返回给用户,因此它会包含 userId。