【发布时间】:2019-01-11 14:28:25
【问题描述】:
我正在使用环回作为我的应用程序的 API 服务器。我正在建立一个类似社交的网络,需要通过电子邮件邀请用户。为了将受邀者与邀请者相关联,我希望邀请者创建一个与他的 userId 关联的“请求令牌”,然后通过电子邮件以如下格式发送:domain.com/register?token=XXXXXX
内置的 Access Token 模型似乎非常适合此目的作为使用的基本模型,因此我们的想法是创建一个从 AccessToken 模型继承的新模型“RequestToken”,但是,新模型随后用于身份验证目的好吧,我不想要。
以下是我的配置文件。值得一提的是,下面看到的“客户”模型是对 Loopbacks“用户”模型的扩展。
/server/model-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
}
}
}
common/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": {}
}
common/request-token.json
{
"name": "RequestToken",
"base": "AccessToken",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"user": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "ownerId"
}
},
"acls": [],
"methods": {}
}
总结:
如何创建一个新的“RequestToken”模型,扩展 Loopbacks“AccessToken”模型,但继续使用内置的 AccessToken 模型进行身份验证等?有可能吗?一旦我从 request-token.json 文件中取出 '"base": "AccessToken"' 行,所有身份验证方法都会再次起作用。
提前非常感谢!
【问题讨论】:
标签: authentication model loopbackjs