Redux Thunk를 활용한 OAuth 인증 흐름 구현하기

본 글에서는 Redux Thunk를 사용하여 OAuth 인증 흐름을 구현하는 방법에 대해 알아보겠습니다.

OAuth는 사용자가 제3자 애플리케이션에 대해 자신의 데이터에 접근 및 인증할 수 있는 프로토콜입니다. Redux Thunk는 Redux 미들웨어로서 비동기 작업을 처리할 수 있게 해주는 도구입니다.

단계 1: OAuth 인증 요청

첫 번째 단계는 OAuth 인증을 위한 요청을 보내는 것입니다. 이를 위해, 특정 API 엔드포인트로 요청을 보내야 합니다. 이 때, 사용자의 리다이렉션 URL도 함께 포함되어야 합니다.

import { requestAuth } from './authActions';

const requestOAuth = () => {
  return (dispatch, getState) => {
    const redirectUrl = getState().auth.redirectUrl;
    dispatch(requestAuth(redirectUrl));
  };
};

위의 예시는 requestOAuth 액션 생성자로서, requestAuth 액션을 디스패치하는 함수입니다. 이 함수는 리덕스 스토어의 상태에서 리다이렉션 URL을 가져와서 requestAuth 액션을 디스패치하는 역할을 수행합니다.

단계 2: OAuth 인증 수락

두 번째 단계는 사용자가 OAuth 인증을 수락하는 것입니다. 사용자가 인증을 수락하면, OAuth 제공자는 인증 코드를 리다이렉트 URL의 쿼리 매개변수로 반환합니다.

import { receiveAuthCode } from './authActions';

const handleCallback = () => {
  return (dispatch) => {
    const urlParams = new URLSearchParams(window.location.search);
    const authCode = urlParams.get('code');
    dispatch(receiveAuthCode(authCode));
  };
};

위의 예시는 콜백 URL에서 인증 코드를 추출하여 receiveAuthCode 액션을 디스패치하는 함수입니다.

단계 3: OAuth 토큰 교환

마지막 단계는 인증 코드를 사용하여 OAuth 토큰을 교환하는 것입니다. 이를 통해 애플리케이션은 사용자의 데이터에 접근할 수 있게 됩니다.

import { exchangeAuthCode } from './authActions';

const exchangeToken = () => {
  return (dispatch, getState) => {
    const authCode = getState().auth.authCode;
    dispatch(exchangeAuthCode(authCode));
  };
};

위의 예시는 exchangeToken 액션 생성자로서, 리덕스 스토어의 상태에서 인증 코드를 가져와서 exchangeAuthCode 액션을 디스패치하는 역할을 수행합니다.

결론

Redux Thunk를 활용하여 OAuth 인증 흐름을 구현하는 방법에 대해 알아보았습니다. 각 단계에서 Redux 액션을 디스패치하여 인증 요청, 인증 수락 및 토큰 교환을 처리할 수 있습니다. 이를 통해 애플리케이션은 OAuth 인증을 통해 사용자의 데이터에 안전하게 접근할 수 있게 됩니다.

참고 자료: