web
next_js
strapi
error

2025-02-10

updateMe api가 없다.

유저가 프론트엔드를 통해 북마크를 추가하고 삭제할 수 있는 기능을 만들고자 users permission 플러그인에서 관련 권한을 허용하러 갔다. 그런데 GET users/me(내 데이터 보기)와 PUT users/:id(id를 아는 유저의 데이터 수정하기) 밖에 없고 PUT users/me(내 데이터 수정하기)가 없었다.

검색해 보니 진짜로 없었다. 왜 안 만들어 놨을까? 유저가 자기 데이터를 편집할 일이 많을 텐데? 안 만들어놔도 사람들이 알아서 잘 하기 때문일까? 인터넷에는 저마다의 방법으로 해결한 사람들이 많았고 Strapi doc에도 policy니 controller니 관련 문서가 있었지만 전에도 strapi 코드를 혼자 커스텀?하려다가 데이터 날려먹은 적이 있어서 소심해져 있었다.

다행히 이 블로그를 따라하니 결과적으로는 성공했다. 거기서는 기존 ‘/users/me’를 확장해서 PUT method를 만들어준다. 터미널에서 curl -v -X OPTIONS http://localhost:1337/api/users/me를 했을때 Allow: HEAD, GET, PUT, DELETE가 나오면 일단 PUT method가 추가는 된 것이다. 그 권한을 Authenticated라는 role에게 부여해 줘야 하는데 어드민 패널에 체크박스가 뜨지 않았다. 캐시도 비우고 여러번 서버를 재시작해도 말이다.

PUT role permission

경고: 따라하지 마시오

어드민 패널에 안 뜨니 직접 권한을 줄 수밖에… insomnia를 사용해 localhost:1337/api/users-permissions/roles/1(role id)에 챗지피티가 준 다음 JSON을 PUT했다.

Body, JSON

{
  "permissions": {
    "users-permissions": {
      "controllers": {
        "user": {
          "updateMe": {
            "enabled": true
          }
        }
      }
    }
  }
}

Headers

Authorization: Bearer { 어드민패널에서 생성한 API Token }
Content-Type: application/json

Send를 누르자{ "ok": true } 가 돌아왔다. 알고보니 저 JSON을 잘못써서 그런지 그 role의 모든 permission을 덮어쓰기 해버린 것이었다. 그래서 기존 permission 설정들이 날아가 있었다.

어쨌든 체크된 updateMe를 얻었다. 이제 Authenticated 유저는 자기 데이터를 수정할 수 있다.

→ 아니었다. 다시 들어가 보니까 updateMe가 없어져 있었다. Strapi ai는 me에 put도 들어가 있으니까 된거라고 한다.