Создание Постоянного доступаТокен в 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
Вот что я сделал:
-
Включить allowEternalTokens
для модели пользователя
В server/model-config.json:
"User": {
"dataSource": "db",
"options": {
"validateUpsert": true,
"allowEternalTokens": true
}
},
-
При входе в систему установите ttl
на -1
User.login(
{
email: email,
password: password,
ttl: -1,
},
-
Как вы уже выяснили, каждый раз, когда вы входите в новый (другой) токен доступа, будет создан. Поэтому, если вы хотите использовать один и тот же токен доступа, войдите только один раз. Вы можете получить токен доступа из модели AccessToken (или непосредственно из базы данных)
AccessToken.findOne(
{
where: {
userId: userId,
},
},
Если у вас есть пользовательская модель, вы можете установить allowEternalTokens
непосредственно в файле определения модели. Кроме того, если у вас есть пользовательская модель, вам также необходимо будет обновить relations
модели AccessToken (либо встроенной, либо вашей собственной, если она есть), чтобы указать на пользовательскую модель пользователя.
Подробнее о пользовательских моделях токена/доступа здесь: http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models