Создание Постоянного доступаТокен в loopback

Как создать токен постоянного доступа для API StrongLoop. Теперь для каждого входа пользователя он создает токен доступа. И ненужная запись в моем db

Я могу увеличить срок действия токена доступа (ttl), как указано здесь.

Но он будет создан для нового входа.

Ответ 1

Вы смешиваете две разные вещи. Создание записи AccessToken и значение ttl для AccessToken.

Когда пользователь регистрируется в новом AccessToken, создается. Если пользователь выходит из системы, AccessToken удаляется. Если пользователь регистрируется в 2 раза, например, из двух разных устройств, вы получите 2 AccessTokens, так что таким образом пользователь сможет получить доступ к вашему приложению с двух устройств одновременно.

Если пользователь хочет войти в систему с того же устройства, и у него уже есть действительный токен, ваше приложение должно распознать это и автоматически войти в систему.

Очевидно, что если значение ttl истекло, токен больше не будет действителен. Этот токен будет удален, если он будет использован. Я думаю, если вам не нужны эти записи в вашей базе данных, вы можете создать собственное задание cron, которое удаляет истекшие токены.

Что касается токена постоянного доступа, ему потребуется отключить значение ttl, и это невозможно в настоящее время для модели AccessToken по умолчанию. Я создал запрос для поддержки этого, если вам интересно, вы можете прослушивать его и посмотреть, будет ли он объединен.

Ответ 2

Loopback имеет опцию, которая позволит вам создать токен постоянного доступа:

allowEternalTokens Boolean Разрешить токены доступа, которые никогда не истекают.

https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#advanced-options

Вот что я сделал:

  1. Включить allowEternalTokens для модели пользователя

    В server/model-config.json:

    "User": {
      "dataSource": "db",
      "options": {
        "validateUpsert": true,
        "allowEternalTokens": true
      }
    },
    
  2. При входе в систему установите ttl на -1

    User.login(
    {
      email: email,
      password: password,
      ttl: -1,
    },
    
  3. Как вы уже выяснили, каждый раз, когда вы входите в новый (другой) токен доступа, будет создан. Поэтому, если вы хотите использовать один и тот же токен доступа, войдите только один раз. Вы можете получить токен доступа из модели AccessToken (или непосредственно из базы данных)

    AccessToken.findOne(
    {
      where: {
        userId: userId,
      },
    },
    

Если у вас есть пользовательская модель, вы можете установить allowEternalTokens непосредственно в файле определения модели. Кроме того, если у вас есть пользовательская модель, вам также необходимо будет обновить relations модели AccessToken (либо встроенной, либо вашей собственной, если она есть), чтобы указать на пользовательскую модель пользователя.

Подробнее о пользовательских моделях токена/доступа здесь: http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models