상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - React에서 JWT 인증을 구현하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
JWT (JSON Web Token) 인증은 웹 <a href='https://sangseek.com/sangseeks/애플/ko'>애플</a>리케이션에서 사용자 인증을 처리하는 데 널리 사용되는 방법입니다. React 애플리케이션에서 JWT 인증을 구현하는 과정은 다음과 같은 단계로 나눌 수 있습니다. 1. JWT의 기본 개념 이해하기 JWT는 세 부분으로 구성된 문자열입니다: 헤더(header), 페이로드(payload), 서명(signature). 이 세 부분은 각각 Base64Url로 인코딩되어 결합됩니다. JWT는 클라이언트와 서버 간의 정보를 안전하게 전송하는 데 사용됩니다. - 헤더 : 토큰의 유형과 해싱 알고리즘을 정의합니다. - 페이로드 : 사용자 정보 및 기타 메타데이터를 포함합니다. - 서명 : 헤더와 페이로드를 기반으로 비밀 키를 사용하여 생성됩니다. 2. 서버 측 JWT 생성 JWT 인증을 구현하기 위해서는 먼저 서버에서 JWT를 생성해야 합니다. Node.js와 Express를 사용하는 예를 들어보겠습니다. ```javascript const express = require('express'); const jwt = require('<a href='https://sangseek.com/sangseeks/jsonwebtoken/ko'>jsonwebtoken</a>'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const SECRET_KEY = 'your_<a href='https://sangseek.com/sangseeks/sec/ko'>sec</a>ret_key'; // 로그인 엔드포인트 app.post('/login', (req, res) => { const { username, password } = req.body; // 사용자 인증 로직 (예: 데이터베이스에서 사용자 확인) if (username === 'user' && password === 'password') { const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' }); return res.json({ token }); } return res.status(401).send('Invalid credentials'); }); // 보호된 라우트 app.get('/protected', (req, res) => { const token = req.headers['authorization']?.split(' ')[1]; if (!token) { return res.status(403).send('Token is required'); } jwt.verify(token, SECRET_KEY, (err, decoded) => { if (err) { return res.status(401).send('Invalid token'); } res.json({ message: 'Protected data', user: decoded }); }); }); app.<a href='https://sangseek.com/sangseeks/listen/ko'>listen</a>(3000, () => { console.log('Server is running on po<a href='https://sangseek.com/sangseeks/rt 3/ko'>rt 3</a>000'); }); ``` 3. React 클라이언트에서 JWT 사용하기 React 애플리케이션에서 JWT를 사용하려면, 사용자가 로그인할 때 서버로부터 JWT를 받아 저장하고, 이후 요청 시 이 토큰을 사용해야 합니다. 3.1. 로그인 폼 만들기 ```javascript import React, { useState } from 'react'; import axios from 'axios'; const Login = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [token, setToken] = useState(''); const handleLogin = async (e) => { e.preventDefault(); try { const response = <a href='https://sangseek.com/sangseeks/await/ko'>await</a> axios.post('http://localhost:3000/login', { username, password }); setToken(response.data.token); localStorage.setItem('token', response.data.token); // 토큰을 로컬 스토리지에 저장 } catch (error) { console.error('Login failed', error); } }; return ( <form onSubmit={handleLogin}> <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} placeholder="Username" /> <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} placeholder="Password" /> <button type="submit">Login</button> </form> ); }; export default Login; ``` 3.2. 보호된 라우트 접근하기 로그인 후, 보호된 라우트에 접근할 때는 저장된 JWT를 사용해야 합니다. ```javascript import React, { useEffect, useState } from 'react'; import axios from 'axios'; const ProtectedRoute = () => { const [data, setData] = useState(null); useEffect(() => { const <a href='https://sangseek.com/sangseeks/fetchData/ko'>fetchData</a> = async () => { const token = localStorage.getItem('token'); try { const response = await axios.get('http://localhost:3000/protected', { headers: { Authorization: `Bearer ${token}`, }, }); setData(response.data); } catch (error) { console.error('Error fetching protected data', error); } }; fetchData(); }, []); return ( <div> {data ? ( <div> <h1>{data.message}</h1> <p>User: {data.user.username}</p> </div> ) : ( <p>Loading...</p> )} </div> ); }; export default ProtectedRoute; ``` 4. JWT 만료 및 로그아웃 처리 JWT는 만료 시간이 설정되어 있으므로, 만료된 토큰을 처리하는 로직이 필요합니다. 클라이언트에서 토큰이 만료되었는지 확인하고, 만료된 경우 사용자에게 로그인을 요구할 수 있습니다. ```javascript const handleLogin = async (e) => { // ... 로그인 로직 if (response.data.token) { const decoded = jwt_decode(response.data.token); const expirationTime = decoded.exp * 1000; // 만료 시간을 밀리초로 변환 const currentTime = Date.now(); if (currentTime > expirationTime) { // 토큰이 만료된 경우 console.error('Token expired'); // 로그아웃 처리 } } }; ``` 5. <a href='https://sangseek.com/sangseeks/보안 고려/ko'>보안 고려</a>사항 - HTTPS 사용 : JWT를 전송할 때는 HTTPS를 사용하여 데이터의 안전성을 보장해야 합니다. - 토큰 저장 위치 : 로컬 스토리지에 JWT를 저장하는 것은 <a href='https://sangseek.com/sangseeks/XSS/ko'>XSS</a> 공격에 취약할 수 있으므로, 가능한 경우 <a href='https://sangseek.com/sangseeks/HttpOnly/ko'>HttpOnly</a> 쿠키를 사용하는 것이 좋습니다. - 서버 측 검증 : 항상 서버에서 JWT를 검증하여 유효성을 확인해야 합니다. 결론 React에서 JWT 인증을 구현하는 것은 사용자 인증을 안전하고 효율적으로 처리하는 방법입니다. 위의 단계들을 통해 기본적인 JWT 인증 시스템을 구축할 수 있으며, 필요에 따라 추가적인 보안 조치를 취하는 것이 중요합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기