Я использую loopback в качестве сервера API для моего приложения. Я создаю социальную сеть, где требуется приглашать пользователей по электронной почте. Чтобы связать приглашенного с приглашающим, я хочу, чтобы приглашающий создал «маркер запроса», связанный с его userId, который затем отправляется по электронной почте в следующем формате: domain.com/register?token=XXXXXX
.
Встроенная модель Access Token кажется идеально подходящей для этой цели в качестве базовой модели, поэтому идея заключается в создании новой модели «RequestToken», унаследованной от модели AccessToken, однако новая модель затем используется для целей аутентификации в качестве ну, чего я не хочу.
Ниже приведены мои конфигурационные файлы. Стоит отметить, что представленная ниже модель «Клиент» расширяет модель «Пользовательская» зацикливания.
/ сервер / модель-config.json:
"_meta": {
"sources": [
"loopback/common/models",
"loopback/server/models",
"../common/models",
"./models"
],
"mixins": [
"loopback/common/mixins",
"loopback/server/mixins",
"../node_modules/loopback-ds-timestamp-mixin",
"../common/mixins",
"./mixins"
]
},
"User": {
"dataSource": "db",
"public": false
},
"AccessToken": {
"dataSource": "db",
"public": false,
"relations": {
"user": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "userId"
}
}
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false,
"options": {
"strictObjectIDCoercion": true
}
},
"Role": {
"dataSource": "db",
"public": false
},
"Email": {
"dataSource": "mail",
"public": false
},
"Customer": {
"dataSource": "db",
"public": true
},
"Friend": {
"dataSource": "db",
"public": true
},
"Memory": {
"dataSource": "db",
"public": true
},
"RequestToken": {
"dataSource": "db",
"public": true
}
}
В разделе «Клиент» я также попытался включить:
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "AccessToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
}
}
общая / customer.json
{
"name": "Customer",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"mixins": {
"TimeStamp": true
},
"properties": {
"firstName": {
"type": "string",
"required": true
},
"lastName": {
"type": "string",
"required": true
},
"dob": {
"type": "date"
},
"country": {
"type": "string"
}
},
"validations": [],
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "AccessToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
},
"requestTokens": {
"type": "hasMany",
"model": "RequestToken",
"foreignKey": "userId",
"options": {
"disableInclude": true
}
}
},
"acls": [
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
}
],
"methods": {}
}
общий / запрос token.json
{
"name": "RequestToken",
"base": "AccessToken",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"user": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "ownerId"
}
},
"acls": [],
"methods": {}
}
Резюме:
Как я могу создать новую модель «RequestToken», расширяющую модель «AccessToken» Loopbacks, но продолжая использовать встроенную модель AccessToken для аутентификации и т. Д.? Это вообще возможно? Как только я извлекаю строку '"base": "AccessToken"'
из файла request-token.json, все методы аутентификации снова работают.
Заранее большое спасибо!