Передача идентификатора пользователя с AuthController - PullRequest
1 голос
/ 29 апреля 2020

Я только что сделал простое приложение для аутентификации, используя акведук в качестве серверной части. Я использовал коды со страниц документации акведука для входа и регистрации. Когда я вхожу с этим кодом в бэкэнд

 router
    .route('/auth/token')
    .link(() => AuthController(authServer));

, я получаю токен, тип токена и дату истечения срока. Есть ли шанс также передать идентификатор пользователя? Или я должен создать свой собственный контроллер для этого?

ОБНОВЛЕНИЕ или как я могу в своем бэкэнде сохранить идентификатор пользователя при сохранении данных

  @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 голос
/ 30 апреля 2020

Интерфейс Flutter

Сначала войдите, используя имя пользователя / адрес электронной почты и пароль. Вы получите авторизационный токен с сервера, если имя пользователя и пароль верны. Затем используйте этот токен для отправки дополнительных привилегированных запросов на сервер.

Вам не нужно сохранять какие-либо личные данные о пользователе (адрес электронной почты или пароль) на клиенте. Однако вы можете сохранить токен, если не хотите, чтобы пользователь снова входил в систему при следующем использовании приложения. При сохранении токена вы должны использовать опцию безопасного хранения. Плагин flutter_secure_storage использует KeyChain на iOS и KeyStore на Android.

Бэкенд акведука

Вы можете используйте все идентификаторы пользователей на сервере. Хотя я не знаю необходимости передавать их клиенту. В серверной части вы можете запросить идентификатор пользователя, а затем использовать его для получения другой информации из базы данных.

Вот пример из документации :

class NewsFeedController extends ResourceController {
  NewsFeedController(this.context);

  ManagedContext context;

  @Operation.get()
  Future<Response> getNewsFeed() async {
    var forUserID = request.authorization.ownerID;

    var query = Query<Post>(context)
      ..where((p) => p.author).identifiedBy(forUserID);

    return Response.ok(await query.fetch());
  }
}

Клиент только прошел в токене. Акведук ищет идентификатор пользователя для вас на основе этого токена. Теперь вы знаете идентификатор пользователя.

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

where((p) => p.author).identifiedBy(forUserID)

эквивалентен

where((p) => p.author.id).equalTo(forUserID)

. Вы можете прочитать об этом в Advanced Queries раздел документации.

...