상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
종합소득세 신고를 위해 필요한 전자세금계산서는 어떻게 받나요?
종합소득세 신고를 위한 전자결제는 어떤 방식으로 이루어지나요?
채무 구제 신청을 했을 때의 절차는 무엇인가요?
채무와 투자 간의 균형을 이루는 방법은 무엇인가요?
체납된 요금의 이자를 미리 계산할 수 있나요?
건강 보험 가입 시 전환 시점에 따른 혜택은 무엇인가요?
건강 보험이 의료비 분담을 어떻게 도와주나요?
소송에서 소송비용을 누가 부담하나요?
이자를 상환하는 데에 가장 좋은 방법은 무엇인가요?
이자를 은행에서 받는 방법은 무엇인가요?
신뢰할 수 있는 이자 계산 앱은 어떤 것이 있나요?
무담보 대출의 이자율은 얼마나 되나요?
Previous
Next
수정하기 - 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순위입니다.
수정하기
취소하기