【问题标题】:Aqueduct - How to save client data without the user ID in my backendAqueduct - 如何在我的后端没有用户 ID 的情况下保存客户端数据
【发布时间】:2020-04-30 14:42:33
【问题描述】:

当我不知道用户的用户 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);
}

【问题讨论】:

    标签: dart aqueduct


    【解决方案1】:

    当您创建新用户时,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 中缺少该 ID。

    假设你有路由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。 The client shouldn't need that, though.

    【讨论】:

    • 非常感谢您的回答.. 这真的很有帮助,我真的很感激.. 我从一开始就有问题了解request 声明的来源,因此我不认为关于以这种方式获取用户 ID...为了澄清起见,您能解释一下 request 语句的来源吗?
    • @delmin 你的控制器扩展了ResourceController 并且request 是该类的成员变量。
    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2019-12-17
    • 2018-02-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多