구글 로그인이나 OAuth 2.0과 같은 인증을 Axios를 사용해 구현할 때의 동작 원리와 과정을 쉽게 설명해 드리겠습니다. 이 과정은 서버와의 통신을 통해 인증 정보를 주고받으며, 사용자를 안전하게 식별하는 역할을 합니다.
사용자가 로그인 폼에 정보를 입력하고 제출하면, 브라우저는 입력된 이메일과 비밀번호를 Axios로 서버에 전송합니다.
import axios from 'axios';
async function login(email, password) {
try {
const response = await axios.post('https://your-api.com/auth/login', {
email,
password,
});
// 서버에서 인증 성공 후 토큰을 받음
const token = response.data.token;
// 토큰을 로컬 스토리지에 저장
localStorage.setItem('token', token);
console.log('로그인 성공!', token);
} catch (error) {
console.error('로그인 실패', error);
}
}
POST /auth/login
요청을 받아 사용자가 보낸 이메일과 비밀번호를 확인합니다.// 서버 응답 (예시)
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
서버가 보낸 JWT 토큰은 클라이언트에서 로컬 스토리지 또는 쿠키에 저장합니다. 이 토큰은 나중에 서버와 통신할 때 사용자가 누구인지 식별하는 데 사용됩니다.
localStorage.setItem('token', token); // 로컬 스토리지에 토큰 저장
사용자가 로그인을 마친 후, 서버로 데이터를 요청할 때는 토큰을 포함해서 요청해야 합니다. 이렇게 해야 서버가 이 사용자가 인증된 사용자임을 인식할 수 있습니다.
async function getUserProfile() {
const token = localStorage.getItem('token'); // 저장된 토큰 가져오기
try {
const response = await axios.get('https://your-api.com/users/me', {
headers: {
Authorization: `Bearer ${token}` // 토큰을 요청 헤더에 포함
}
});
console.log('사용자 프로필:', response.data);
} catch (error) {
console.error('프로필 가져오기 실패', error);
}
}
Authorization
헤더: 요청할 때 이 헤더에 Bearer <토큰>
형식으로 토큰을 포함시킵니다. 서버는 이 토큰을 사용해 요청한 사용자가 인증된 사용자임을 확인합니다.서버는 토큰이 포함된 요청을 받으면, 해당 토큰을 검증합니다. 토큰이 유효하고, 사용자가 인증된 사용자라면 요청한 데이터를 응답합니다.
만약 토큰이 만료되었거나 잘못된 토큰이 포함된 경우, 서버는 401 Unauthorized 응답을 보냅니다. 이 때 클라이언트는 토큰을 갱신하거나 사용자를 다시 로그인시켜야 합니다.
일반적으로 Refresh Token을 사용해 새로운 토큰을 발급받는 과정을 추가합니다. 토큰이 만료된 경우, Refresh Token을 사용해 새로운 Access Token을 발급받아 API 요청을 재시도할 수 있습니다.
async function refreshToken() {
try {
const response = await axios.post('https://your-api.com/auth/refresh', {
refreshToken: localStorage.getItem('refreshToken')
});
const newToken = response.data.token;
localStorage.setItem('token', newToken);
return newToken; // 새로운 토큰 반환
} catch (error) {
console.error('토큰 갱신 실패', error);
}
}
POST /auth/login
).이러한 방식으로 로그인 및 인증 과정이 이루어지며, 클라이언트는 서버로부터 받은 토큰을 사용해 계속해서 인증된 상태로 서버와 통신할 수 있습니다.