Акведук - Как сохранить данные клиента без идентификатора пользователя в моем бэкэнде

Как я могу сохранить данные для пользователя, если я не знаю его идентификатор пользователя? Я хочу сохранить его в своей серверной части 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);
}

person delmin    schedule 30.04.2020    source источник


Ответы (1)


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);
}

Проблема в том, что пользователь не знал своего идентификатора, поэтому он отсутствует в newData.

Предполагая, что у вас есть маршрут, защищенный авторизатором, вы можете получить идентификатор пользователя, например это:

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 вместе с ними. Однако клиенту это не нужно.

person Suragch    schedule 01.05.2020
comment
Большое спасибо за ответ .. Это было действительно полезно, и я очень ценю это .. У меня с самого начала была проблема с пониманием того, откуда исходит выражение request, поэтому я не думал о том, чтобы получить идентификатор пользователя таким образом ... Просто для пояснения, можете ли вы объяснить, откуда взялось выражение request? - person delmin; 01.05.2020
comment
@delmin Ваш контроллер расширяет ResourceController, а request является переменной-членом этого класса. - person Suragch; 01.05.2020