sori.studio

์›Œ๋“œํ”„๋ ˆ์Šค ์‚ฌ์šฉ์ž ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ (ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์šฉ)

๐Ÿ“˜ ์›Œ๋“œํ”„๋ ˆ์Šค REST API๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜๋งŒ์˜ ์‚ฌ์ดํŠธ ๋งŒ๋“ค๊ธฐ - 3ํŽธ

์›Œ๋“œํ”„๋ ˆ์Šค์—์„œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ (์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์šฉ)

 

 

 

์ด์ œ ๊ธ€์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ์ธํ•˜๊ณ , JWT ์ธ์ฆ์„ ์ด์šฉํ•ด์„œ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ถ™์—ฌ๋ดค๋‹ค.

์ด์ œ ๊ธฐ๋ณธ์ ์ธ '๋ณด๊ณ ', ‘์“ฐ๊ธฐ’ ํ๋ฆ„์€ ์™„์„ฑ๋œ ์…ˆ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋Š”?
๋ฐ”๋กœ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋„ ์Šค์Šค๋กœ ํšŒ์›๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

์™œ ํšŒ์›๊ฐ€์ž…์ด ํ•„์š”ํ• ๊นŒ?

ํŠธ์œ„ํ„ฐ์ฒ˜๋Ÿผ ์งง๊ฒŒ ๊ธ€์„ ์“ฐ๋Š” ๊ตฌ์กฐ๋กœ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—,
๊ด€๋ฆฌ์ž ํ˜ผ์ž ๋ธ”๋กœ๊ทธ์ฒ˜๋Ÿผ ๊ธ€์„ ๊ณ„์† ์“ฐ๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ํ•„์š”ํ•˜๊ณ , ๊ทธ ์‚ฌ์šฉ์ž๋“ค์ด ๋กœ๊ทธ์ธํ•ด์„œ ๊ธ€์„ ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ ค๋ฉด ๋‹น์—ฐํžˆ ํšŒ์›๊ฐ€์ž…๋„ ๋˜์–ด์•ผ ํ•˜๊ณ ...

 

 

์™œ ์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ ํƒํ–ˆ๋Š”๊ฐ€?

์›Œ๋“œํ”„๋ ˆ์Šค REST API๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๋“ฑ๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธด ํ•˜์ง€๋งŒ, ๋ณด์•ˆ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” REST API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋“ฑ๋ก์ด ๋ง‰ํ˜€ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์›Œ๋“œํ”„๋ ˆ์Šค ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ API ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ฐ€๋Šฅ์€ํ•˜๋‹ค.

 

ํšŒ์›๊ฐ€์ž…(register.js) ์Šคํฌ๋ฆฝํŠธ:

const appPassword = '์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„๋ฐ€๋ฒˆํ˜ธ';
const adminUser = '๊ด€๋ฆฌ์ž ์•„์ด๋””';

const response = await fetch('https://๋„๋ฉ”์ธ/wp-json/wp/v2/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Basic ' + btoa(`${adminUser}:${appPassword}`),
  },
  body: JSON.stringify({
    username: username,
    email: email,
    password: password,
    nickname: nickname,
    roles: ['author'],
  }),
});

ํ•˜์ง€๋งŒ ์ด ๊ตฌ์กฐ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ง์ ‘ ๊ด€๋ฆฌ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์‹ค์ƒ ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•  ๊ฒƒ์ธ๋ฐ, ์œ ๋ช…ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค๋„ ๋งŽ์ง€๋งŒ ํŠน์ • ๊ธฐ๋Šฅ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๊ธฐ์— ์ง์ ‘ ๋งŒ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์จ์„œ ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™” ํ•˜๋„๋ก ํ•œ๋‹ค. (์ดํ›„ ์œ ์ง€๊ด€๋ฆฌ ์—ฌ๋ถ€๋‚˜ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ๋” ํŽธ๋ฆฌ)

 

 

์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ(custom-rest-register)

์›Œ๋“œํ”„๋ ˆ์Šค์˜ REST API ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•ด ์–ด๋–ค ์‚ฌ์šฉ์ž๋“  ์ž‘์„ฑ์ž(author) ๊ถŒํ•œ์œผ๋กœ ํšŒ์›๊ฐ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‹ค.

custom-rest-register.zip
0.00MB

 

 

 

ํ”„๋ก ํŠธ์—”๋“œ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๊ตฌํ˜„

์ด์ œ ์•„๋ž˜์ฒ˜๋Ÿผ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐ”๋กœ ํšŒ์›๊ฐ€์ž…์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ์ดํ›„์—” ๋” ์ด์ƒ ๊ด€๋ฆฌ์ž ์ธ์ฆ์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•„์š” ์—†๋‹ค.

 

ํšŒ์›๊ฐ€์ž…(register.html) ํŽ˜์ด์ง€:

<input type="text" id="username" placeholder="์•„์ด๋”” (์˜๋ฌธ/์ˆซ์ž)" />
<input type="password" id="password" placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ" />
<input type="text" id="nickname" placeholder="๋‹‰๋„ค์ž„" />
<input type="email" id="email" placeholder="์ด๋ฉ”์ผ" />
<button onclick="register()">ํšŒ์›๊ฐ€์ž…</button>
<p id="message"></p>

 

ํšŒ์›๊ฐ€์ž… ์Šคํฌ๋ฆฝํŠธ:

async function register() {
    const username = document.getElementById('username').value;
    const password = document.getElementById('password').value;
    const email = document.getElementById('email').value;
    const nickname = document.getElementById('nickname').value;

    const response = await fetch('https://myDomain.com/wp-json/custom-register/v1/register', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            username: username, // ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์•„์ด๋””
            email: email,       // ์ด๋ฉ”์ผ ์ฃผ์†Œ
            password: password, // ๋น„๋ฐ€๋ฒˆํ˜ธ
            nickname: nickname, // ๋‹‰๋„ค์ž„
        }),

    });

    const result = await response.json();
    if (response.ok) {
        document.getElementById('message').innerText = 'ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต! ๋กœ๊ทธ์ธํ•˜์„ธ์š”.';
        setTimeout(() => (window.location.href = 'login.html'), 2000);
    } else {
        document.getElementById('message').innerText =
            'ํšŒ์›๊ฐ€์ž… ์‹คํŒจ: ' + (result.message || '์˜ค๋ฅ˜ ๋ฐœ์ƒ');
    }
}