커스텀 UI를 로컬에서 디버그 및 테스트하기
Logto Cloud 사용자라면, Logto에 "나만의 UI"를 쉽게 적용할 수 있도록 지원합니다. Cloud 사용자는 콘솔 > 로그인 & 계정 > 브랜딩 > 나만의 UI 적용에서 커스텀 UI 에셋이 담긴 zip 파일을 업로드할 수 있습니다 (나만의 UI 적용 페이지에서 자세한 내용을 확인하세요).
하지만 이러한 커스텀 UI 페이지를 개발할 때, Logto Cloud에 업로드하기 전에 코드를 로컬에서 테스트하고 디버깅하고 싶을 것입니다. 이 CLI 명령어는 로컬 터널을 설정하여 다음 3가지 엔티티를 연결하는 데 도움을 줍니다: Logto Cloud 인증 엔드포인트, 애플리케이션, 그리고 커스텀 로그인 UI.
왜 이 기능이 필요한가요?
기본적으로, 애플리케이션에서 "로그인" 버튼을 클릭하면 Logto 엔드포인트에 설정된 로그인 페이지로 이동하게 됩니다. 성공적인 로그인 플로우는 다음과 같이 설명할 수 있습니다:
하지만 이제 직접 커스텀 로그인 UI를 개발하고 있으므로, 로컬에서 실행 중인 커스텀 로그인 UI 페이지로 이동할 수 있는 방법이 필요합니다. 이를 위해서는 애플리케이션에서 나가는 요청을 가로채어 커스텀 로그인 UI 페이지로 리디렉션하는 로컬 터널 서비스가 필요합니다.
또한, 사용자를 인증하고 세션을 관리하기 위해 Logto의 Experience API와 상호작용해야 합니다. 이 서비스는 Experience API 요청을 Logto Cloud로 전달하여 CORS 문제를 방지하는 데도 도움을 줍니다.
아래 시퀀스 다이어그램은 커스텀 UI와 터널 서비스가 적용된 성공적인 "로그인" 플로우를 보여줍니다:
터널 서비스가 있으면, 커스텀 로그인 UI를 로컬에서 개발 및 테스트할 수 있으며, 변경할 때마다 Logto Cloud에 에셋을 업로드할 필요가 없습니다.
사용 방법
1단계: 명령어 실행
Cloud 테넌트 ID가 foobar이고, 로컬 개발 서버에서 커스텀 로그인 페이지가 http://localhost:4000에 실행 중이라면, 다음과 같이 명령어를 실행할 수 있습니다:
- CLI
- npx
logto-tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://foobar.logto.app/
npx @logto/tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://foobar.logto.app/
Logto에서 커스텀 도메인을 설정한 경우에도 동일하게 동작합니다:
- CLI
- npx
logto-tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://your.custom.domain/
npx @logto/tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://your.custom.domain/
또한, 개발 서버를 먼저 실행하지 않아도 정적 html 에셋을 지원합니다. 지정한 경로에 index.html이 있는지만 확인하세요.
- CLI
- npx
logto-tunnel -p 9000 --experience-path /path/to/your/static/files --endpoint https://foobar.logto.app/
npx @logto/tunnel -p 9000 --experience-path /path/to/your/static/files --endpoint https://foobar.logto.app/
2단계: 애플리케이션에서 엔드포인트 URI 수정
마지막으로, 애플리케이션을 실행하고 Logto 엔드포인트를 터널 서비스 주소인 http://localhost:9000/로 설정하세요.
React 애플리케이션 예시:
import { LogtoProvider, LogtoConfig } from '@logto/react';
const config: LogtoConfig = {
// endpoint: 'https://foobar.logto.app/', // 기존 Logto Cloud 엔드포인트
endpoint: 'http://localhost:9000/', // 터널 서비스 주소
appId: '<your-application-id>',
};
const App = () => (
<LogtoProvider config={config}>
<YourAppContent />
</LogtoProvider>
);
소셜 로그인을 사용하는 경우, 소셜 제공자 설정에서 리디렉션 URI도 터널 서비스 주소로 변경해야 합니다.
http://localhost:9000/callback/<connector-id>
모든 설정이 올바르게 완료되면, 애플리케이션에서 "로그인" 버튼을 클릭할 때 Logto의 기본 UI 대신 커스텀 로그인 페이지로 이동하며, Logto Experience API와 추가 상호작용이 가능한 유효한 세션(쿠키)도 함께 제공됩니다.
즐거운 코딩 되세요!
관련 리소스
GitHub Actions 워크플로우로 커스텀 로그인 UI 배포 자동화하기