ReactJS와 PHP를 연동하여 로그인 처리를 하려면 다음과 같은 과정이 필요합니다:
- ReactJS 애플리케이션에서 로그인 폼을 구성합니다.
- ReactJS 애플리케이션에서 서버에 로그인 요청을 보냅니다.
- PHP 서버에서 로그인 요청을 수신하고, 사용자 인증을 수행합니다.
- PHP 서버에서 ReactJS 애플리케이션으로 응답을 보냅니다.
- ReactJS 애플리케이션에서 PHP 서버의 응답을 받아 결과를 표시합니다.
아래는 ReactJS와 PHP를 사용한 로그인 처리의 예시 코드입니다:
ReactJS:
import React, { useState } from 'react';
import axios from 'axios';
const Login = () => {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const handleSubmit = async (e) => {
    e.preventDefault();
    try {
      const response = await axios.post('http://your-server.com/api/login', {
        username,
        password,
      });
      console.log(response.data);
    } catch (error) {
      console.error(error);
    }
  };
  return (
    <form onSubmit={handleSubmit}>
      <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;
PHP에서는 ReactJS 애플리케이션에서 보낸 로그인 요청을 처리하기 위해, 다음과 같은 과정이 필요합니다:
- $_POST또는- $_GET변수를 사용하여 ReactJS에서 보낸 데이터를 수신합니다.
- 수신한 데이터(사용자 이름과 비밀번호)를 이용하여 사용자 인증을 수행합니다.
- 사용자 인증에 성공하면, 결과(예를 들어, JWT 토큰)를 JSON 형식으로 응답합니다.
아래는 PHP로 ReactJS에서 보낸 로그인 요청을 처리하는 예시 코드입니다:
<?php
header("Content-Type: application/json");
$username = $_POST['username'];
$password = $_POST['password'];
// Authenticate user
// ...
if ($authenticated) {
  $token = generateToken();
  echo json_encode(array("token" => $token));
} else {
  http_response_code(401);
  echo json_encode(array("error" => "Incorrect username or password"));
}
function generateToken() {
  // Generate a JWT token
  // ...
}
ReactJS에서 JWT 토큰을 처리하려면, 다음과 같은 과정이 필요합니다:
- 로그인 API에서 사용자 인증에 성공하면, 수신한 JWT 토큰을 브라우저의 localStorage에 저장합니다.
- 그 다음 API 호출에서, 저장한 JWT 토큰을 Authorization헤더에 포함하여 요청을 전송합니다.
// Store the token in local storage after a successful login
localStorage.setItem("token", response.data.token);
// Attach the token to subsequent API requests
axios.defaults.headers.common["Authorization"] = `Bearer ${localStorage.getItem("token")}`;
PHP에서 JWT 토큰을 처리하려면, 다음과 같은 과정이 필요합니다:
- API 요청에서 Authorization헤더를 수신합니다.
- 헤더에서 JWT 토큰을 추출하고, 검증(예를 들어, 만료 여부, 서명)을 수행합니다.
- JWT 토큰이 유효하면, 토큰에서 포함된 정보(예를 들어, 사용자 ID)를 사용하여 요청을 처리합니다.
아래는 PHP에서 JWT 토큰을 검증하는 예시 코드입니다:
<?php
try {
  // HTTP 헤더에서 Authorization 헤더를 가져옵니다.
  $headers = apache_request_headers();
  $authorizationHeader = $headers["Authorization"] ?? "";
  $token = str_replace("Bearer ", "", $authorizationHeader);
  // 토큰을 비밀 키를 사용하여 디코딩합니다.
  $secretKey = "당신의_비밀_키";
  $decodedToken = JWT::decode($token, $secretKey, array("HS256"));
  // 디코딩된 토큰 데이터를 사용하여 API 요청을 처리합니다.
  $userId = $decodedToken->data->userId;
  // ...
} catch (Exception $e) {
  // 토큰이 유효하지 않으면 오류 응답을 반환합니다.
  http_response_code(401);
  echo json_encode(array("message" => "인증되지 않음"));
  exit();
}
JWT 토큰을 인코딩/디코딩하는 PHP 라이브러리, 예를 들어 firebase/php-jwt를 설치해야 한다는 점에 주의하세요.