我正在尝试设置一个示例强循环应用程序,当我尝试使用/ explorer试用post api时,我收到以下错误。
"Cannot call AccessToken.findById(). The findById method has not been setup.. The PersistedModel has not been correctly attached to a DataSource."
我跑过并安装了slc loopback:acl,其中包含以下设置:
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW"
}
],
但是,这些设置似乎不适用于我的模型。
答案 0 :(得分:1)
我遇到了同样的问题:解决这个问题的方法是删除浏览器的本地存储(在开发工具的“资源”选项卡中)。 对此的解释是我一直在使用另一个使用基于令牌的身份验证的环回应用程序。
答案 1 :(得分:1)
我有相同的错误消息,但解决方案不可用,因为每个人都有自己的想法。
那么对我有用的是,如果您根据loopback-component-passport中提供的参考扩展了AccessToken,
仅不要从model-config中删除基本AccessToken即可。不必担心,因为环回只会使用扩展模型来保留令牌。
model-config.json
`'....
,
"AccessToken": {
"dataSource": "adnexux",
"public": false
},
"accessToken": {
"dataSource": "adnexux",
"public": false
},
...'`
然后只需将其添加到middleware.json
`....
,
"loopback#token": {
"params": {
"model": "accessToken"
}
}
},
...`
如果错误没有扩展accessToken:
然后只要检查模型配置是否将模型连接到数据源。
`....
"AccessToken": {
"dataSource": "adnexux",
"public": false
},
.....`
并且要获取当前用户,可以将此代码粘贴到server.js中
`'app.use(function setCurrentUser(req, res, next) {
if (!req.accessToken) {
return next();
}
app.models.user.findById(req.accessToken.userId, function(err, user) {
if (err) {
return next(err);
}
if (!user) {
return next(new Error('No user with this access token was found.'));
}
res.locals.currentUser = user;
next();
});
});'`