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

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

1 Ответ

1 голос
/ 01 мая 2020

Акведук автоматически генерирует идентификатор пользователя при создании нового пользователя. Этот идентификатор связан с учетными данными пользователя или токеном доступа.

В данном примере пользователь передал некоторые данные в модели данных:

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

Кстати, поскольку вы возвращаете вставленные данные пользователю, он будет включать в себя идентификатор пользователя. Однако клиенту это не нужно.

...