스터디/Etc

[Strapi] UUID Random

Dalmangyi 2023. 10. 3.

*Strapi v4 기준 입니다.

 

Strapi에는 content를 만들고 나면, 순차적으로 ID가 붙게 됩니다.

하지만 이러한 ID는 관리자가 보기에 좋고 외우기도 좋지만,

다른 악성사용자가 보기엔 파헤치기 좋은 순서가 되버립니다.

 

그렇기 때문에 이러한 ID를 외부에 노출할 수 없어서

대부분 유추하기 까다로운 UUID형태로 많이 쓰곤합니다.

 

 

 

 

Strapi Marketplace에는 UUID관련 Plugin가 3개나 존재합니다.

물론 과거엔 잘 됬을지 몰라도 지금은 관리 안되고 있는 플러그인 이였습니다.

 

 

 

 

굳이 플러그인을 쓰지 않아도 금방 개발할 수 있습니다.

https://docs.strapi.io/dev-docs/backend-customization/models#available-lifecycle-events

개발 문서를 보니, Content-Type의 생명주기를 직접 컨트롤 할 수 있었습니다.

//./src/api/[api-name]/content-types/[content-type-name]/lifecycles.js

module.exports = {
  beforeCreate(event) {
    const { data, where, select, populate } = event.params;

    // let's do a 20% discount everytime
    event.params.data.price = event.params.data.price * 0.8;
  },

  afterCreate(event) {
    const { result, params } = event;

    // do something to the result;
  },
};

예제를 보니, export처리해서 beforeCreate함수와 afterCreate함수를 사용하면 되는거 같습니다.

 

 

 

 

 

uuid 텍스트가 들어갈 field를 만들어줘야 합니다.

string형태로 들어갈 수 있는 데이터 형태면 됩니다.

 

 

원하는 api와 content-type 폴더로 이동후에

lifecycles.js파일을 만들고 아래 처럼 입력해주겠습니다.

const { v4: uuid } = require("uuid");

module.exports = {

    beforeCreate(event) {
        const { data, where, select, populate } = event.params;
        event.params.data.myuid = uuid();
    } 
};

이렇게 하면, entry가 생성될때마다 자동으로 uuid값이 myuid 필드에 입력될껍니다.

 

 

 

myuid에 입력을 하지 않고,

오른쪽위에 save를 눌러보겠습니다.

 

저장이 되면서 myuid가 자동으로 입력된걸 확인할 수 있습니다.

 

댓글