์๋ํ๋ ์ค ์ฌ์ฉ์ ํ์๊ฐ์ ๊ธฐ๋ฅ ์ง์ ๋ง๋ค๊ธฐ (ํ๋ฌ๊ทธ์ธ ํ์ฉ)
๐ ์๋ํ๋ ์ค 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) ๊ถํ์ผ๋ก ํ์๊ฐ์ ์ด ๊ฐ๋ฅํ๋๋ก ํด์ฃผ๋ ํ๋ฌ๊ทธ์ธ์ด๋ค.
ํ๋ก ํธ์๋ ํ์๊ฐ์ ํ์ด์ง ๊ตฌํ
์ด์ ์๋์ฒ๋ผ ํ๋ก ํธ์๋์์ ๋ฐ๋ก ํ์๊ฐ์
์ ์์ฒญํ ์ ์๋ค.
ํ๋ฌ๊ทธ์ธ ์ค์น ์ดํ์ ๋ ์ด์ ๊ด๋ฆฌ์ ์ธ์ฆ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋น๋ฐ๋ฒํธ๋ ํ์ ์๋ค.
ํ์๊ฐ์ (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 || '์ค๋ฅ ๋ฐ์');
}
}