2017-09-27 87 views
0

我有一個擴展了內置用戶模型的客戶模型。但即使提供了正確的access_token,PUT請求更新客戶也不起作用。環回無法使用PUT請求更新用戶/客戶

我以登錄終端用戶的身份登錄並獲得了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

您可以嘗試提供用戶,ACL像下面的例子中,

"acls": [ 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW" 
    }, { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    } 
    ] 

希望這會工作。

+0

不,它不起作用。當默認用戶模型已經有一個時,添加更多ACL的用途是什麼。問題是默認ACL不起作用。 –

0

用戶模型的默認ACL需要驗證,除了POST請求以外的每個請求 - 所以這不是問題。

要在此模型上發出GET,PUT/PATCH或DELETE請求,您需要在請求中登錄並使用令牌。

例子,你的情況:

  • 發佈一個新的客戶,如: { "username": "stack_user", "email": "[email protected]", "password":"stackoverflow" }; 在POST http://localhost:3000/api/customers/
  • 使用電子郵件和密碼登錄:{ "email": "[email protected]", "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 

,然後再試一次?

+0

嗨F3LIX79,我遵循相同的,但它不工作。刪除replaceOnPut也無濟於事。當我們擴展默認的用戶模型時,這似乎是一個問題。 –

+0

您是否設法通過在瀏覽器頁面右上角設置訪問令牌來使其在Swagger的「API Explorer」中工作? – F3L1X79

+0

不能。它在API swagger或Postman中無法使用訪問令牌。 –

相關問題