我有一个Customer模型,它扩展了内置用户模型。但是,即使提供了正确的access_token,PUT对Update客户的请求也根本不起作用。
我使用登录端点以用户身份登录并获得了access_token。 PUT请求更新客户属性:
PUT http://localhost:3000/api/customers/59cb873ab21a902ab0afece1
根据我的理解,所有者应该能够更新自己的记录,但它不断抛出以下错误:
{
"error": {
"statusCode": 401,
"name": "Error",
"message": "Authorization Required"
}
}
此外,当我尝试使用相同的access_token删除时,它可以正常工作。
DELETE http://localhost:3000/api/customers/59cb873ab21a902ab0afece1
customer.json文件如下所示:
{
"name": "customer",
"plural": "customers",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"realm": null,
"emailVerified": null,
"name": {
"type": "string"
},
"username": {
"type": "string"
},
"cellnumber": {
"type": "string"
},
"status": {
"type": "string"
}
},
"validations": [],
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "accessToken",
"foreignKey": "userId"
}
},
"acls": [
],
"methods": {},
"replaceOnPUT": false
}
我哪里错了?我该如何解决这个问题?
由于
答案 0 :(得分:0)
您可以尝试提供USER,ACL,如下例所示,
"acls": [
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
}, {
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
}
]
希望这会奏效。
答案 1 :(得分:0)
用户模型的默认ACL要求对除POST请求之外的每个请求进行身份验证 - 因此它不是问题。
要在此模型上发出GET,PUT / PATCH或DELETE请求,您需要登录并在请求中使用令牌。
案例中的例子:
{
"username": "stack_user",
"email": "test@stackoverflow.com",
"password":"stackoverflow"
}
;
在POST http://localhost:3000/api/customers/
{
"email": "test@stackoverflow.com",
"password":"stackoverflow"
}
;
在POST http://localhost:3000/api/customers/login
=>你会收到如下回复:
{
"id": "jazSRZYbjJai3JeCYpb6u4nYsRGWbaQk5SK3nQPkMoNeUdrAYK3kYwaXECrfj6Vk",
"ttl": 1209600,
"created": "2017-09-29T11:44:16.111Z",
"userId": "59cb873ab21a902ab0afece1"
}
其中 id 是access_token。
PUT http://localhost:3000/api/customers/59cb873ab21a902ab0afece1?access_token=jazSRZYbjJai3JeCYpb6u4nYsRGWbaQk5SK3nQPkMoNeUdrAYK3kYwaXECrfj6Vk
它应该有用。
如果没有,您可以尝试删除此行:
"replaceOnPUT": false
然后再试一次?