콘텐츠로 건너뛰기

Google 로그인 설정

이 가이드에서는 Capgo 소셜 로그인으로 Google 로그인을 설정하는 방법을 알아봅니다. Google 로그인을 설정하려면 다음이 필요합니다:

  • Google 계정

이 부분에서는 Google에 의해 표시되는 로그인 화면을 설정합니다.

  1. console.cloud.google.com으로 이동하세요.
  2. 프로젝트 선택기를 클릭하세요 Google 콘솔 프로젝트 선택기
  3. 아직 프로젝트가 없다면 새 프로젝트를 생성해 주세요.
    1. ‘새 프로젝트’를 클릭하세요. Google 콘솔의 새 프로젝트 버튼
    2. 프로젝트 이름을 지정하고 Create을(를) 클릭하세요. 이름 필드와 만들기 버튼이 표시된 프로젝트 이름 지정 화면
    3. 올바른 프로젝트를 진행하고 있는지 확인하세요 올바른 프로젝트 선택을 나타내는 선택기에 표시되는 프로젝트 이름
  4. OAuth consent screen 구성을 시작합니다.
    1. 검색창을 클릭하세요

      Google 콘솔 검색 창
    2. OAuth consent screen을 검색하여 클릭하세요.

      OAuth 동의 화면 옵션이 표시된 검색결과
    3. 동의 화면 구성 :::참고 대중에게 공개되는 앱을 개발한다고 가정하여 external 사용자 유형을 사용하겠습니다. 귀하에게 가장 적합한 사용자 유형을 선택하고 create를 클릭하세요. :::

      create을 클릭하세요.

      OAuth 외부 및 내부 옵션이 있는 동의 화면 사용자 유형 선택
  5. 앱에 대한 정보를 입력하세요.
    1. ‘앱 정보’부터 시작해 보겠습니다.

      앱 이름 및 사용자 지원 이메일 필드가 표시된 앱 정보 섹션
      • ‘앱 이름’을 입력하세요. :::주의 이 내용은 사용자에게 표시됩니다 :::
      • ‘사용자 지원 이메일’을 입력하세요. :::참고 지원 이메일에 대한 자세한 내용은 여기에서 확인하세요. :::
      1. 앱 로고를 추가할 수 있습니다.

        OAuth 동의 화면의 앱 로고 업로드 섹션

        :::참고 이는 필수 사항이 아니므로 이 단계를 건너뛰겠습니다. :::

      2. 앱 도메인을 구성해야 합니다**

        승인된 도메인 필드가 있는 앱 도메인 구성 섹션

        :::참고 이것은 게시되지 않을 간단한 데모이기 때문에 그렇게 하지 않겠습니다. 하지만 이 섹션을 작성하는 것이 좋습니다. :::

      3. 개발자의 이메일을 제공해야 합니다

        이메일 필드가 있는 개발자 연락처 정보 섹션
      4. ‘저장하고 계속하기’를 클릭하세요.

        양식 하단의 저장 및 계속 버튼
  6. 범위 구성
    1. ‘범위 추가 또는 제거’를 클릭하세요.

      범위 구성 화면의 범위 추가 또는 제거 버튼
    2. 다음 범위를 선택하고 update을 클릭합니다.

      이메일 및 프로필 범위가 선택된 범위 선택 대화 상자
    3. ‘저장하고 계속하기’를 클릭하세요.

      범위 화면의 저장 및 계속 버튼
  7. 테스트 사용자 추가
    1. ‘사용자 추가’를 클릭하세요. 테스트 사용자 섹션의 사용자 추가 버튼
    2. Google 이메일을 입력하고 Enter를 클릭한 후 add를 클릭하세요. 테스트 사용자를 위한 이메일 입력 필드 및 추가 버튼
    3. ‘저장하고 계속하기’를 클릭하세요. 테스트 사용자 화면의 저장 및 계속 버튼
  8. ‘대시보드로 돌아가기’를 클릭하세요. 완료 페이지 하단의 대시보드로 돌아가기 버튼
  9. 확인을 위해 앱을 제출하세요. :::참고 확인을 위해 앱을 제출하는 것이 좋습니다. 이는 이 튜토리얼의 범위를 벗어납니다. 자세한 내용은 여기에서 확인하세요. 이는 로컬 테스트에는 필요하지 않지만 프로덕션에는 필요합니다. :::

온라인 접속과 오프라인 접속의 차이점

Section titled “온라인 접속과 오프라인 접속의 차이점”

Google을(를) 사용하는 방법에는 여러 가지가 있습니다. Capacitor로 로그인하세요. 다음은 둘 사이의 차이점을 요약한 표입니다.

온라인 접속오프라인 액세스
백엔드 필요
장기 액세스 토큰
간편한 설정

아직도 어떤 것을 선택해야 할지 모르겠다면 다음 시나리오를 고려해 보세요.

  1. 사용자 정의 JWT을 발행한 직후 사용자가 로그인하기를 원합니다. 귀하의 앱은 Google API를 호출하지 않습니다.

    이 경우 온라인 액세스를 선택하십시오.

  2. 앱은 클라이언트에서 일부 Google API를 호출하지만 백엔드에서는 호출하지 않습니다.

    이 경우 온라인 액세스를 선택하십시오

  3. 앱은 백엔드에서 일부 Google API를 호출하지만 사용자가 앱을 적극적으로 사용하는 경우에만 가능합니다.

    이 경우 온라인 액세스를 선택하십시오

  4. 사용자가 적극적으로 앱을 사용하지 않을 때에도 앱은 사용자의 캘린더를 주기적으로 확인합니다.

    이 경우 오프라인 액세스를 선택하세요

온라인 액세스를 위한 백엔드 예시

Section titled “온라인 액세스를 위한 백엔드 예시”

튜토리얼의 이 부분에서는 백엔드에서 사용자를 확인하는 방법을 보여 드리겠습니다.

이 예는 매우 간단하며 다음 기술을 기반으로 합니다.

이 예제의 코드는 여기에서 찾을 수 있습니다.

보시다시피:

토큰을 확인하는 Google 인증 코드를 보여주는 VS 코드

아이디어는 다소 간단합니다. https://www.googleapis.com/oauth2/v3/tokeninfo에 간단한 GET 요청을 보내면 토큰이 유효한지 여부가 반환되고, 유효한 경우 사용자의 이메일이 제공됩니다. 또한 사용자 토큰에 대한 다른 정보도 제공합니다.

Google OAuth 사용자 세부정보와 함께 토큰 정보 응답을 보여주는 플레이그라운드

거기에서 사용자에게 자신만의 JWT을 발행하거나 일종의 세션 쿠키를 발행할 수 있습니다. 최종 인증 구현의 가능성은 무궁무진합니다.

Google API에 전화하고 싶다면 Google의 OAuth 2.0 플레이그라운드를 살펴보는 것이 좋습니다. 여기에서 어떤 API를 호출할 수 있는지 쉽게 확인할 수 있습니다.

자체 백엔드로 오프라인 액세스 사용

Section titled “자체 백엔드로 오프라인 액세스 사용”

온라인 액세스를 사용하려면 다음이 필요합니다.

  • HTTP 서버

이 예에서는 다음 기술을 사용하여 내 앱에 오프라인 액세스를 제공합니다.

이 예시의 코드는 여기에서 확인할 수 있습니다.

클라이언트 코드는 다음과 같습니다.

import { Capacitor } from '@capacitor/core';
import { GoogleLoginOfflineResponse, SocialLogin } from '@capgo/capacitor-social-login';
import { usePopoutStore } from '@/popoutStore'; // <-- specific to my app
const baseURL = "[redacted]";
async function fullLogin() {
await SocialLogin.initialize({
google: {
webClientId: '[redacted]',
iOSClientId: '[redacted]',
iOSServerClientId: 'The same value as webClientId',
mode: 'offline' // <-- important
}
})
const response = await SocialLogin.login({
provider: 'google',
options: {
forceRefreshToken: true // <-- important
}
})
if (response.provider === 'google') {
const result = response.result as GoogleLoginOfflineResponse
const res = await fetch(`${baseURL}/auth/google_offline`, {
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
serverAuthCode: result.serverAuthCode,
platform: Capacitor.getPlatform()
}),
method: "POST"
})
if (res.status !== 200) {
popoutStore.popout("Full google login failed", "check console");
return
}
const { jwt } = await res.json();
const userinfo = await fetch(`${baseURL}/auth/get_google_user`, {
headers: {
Authorization: `Bearer ${jwt}`
}
})
if (userinfo.status !== 200) {
popoutStore.popout("Full google (userinfo) login failed", "check console");
return
}
popoutStore.popout("userinfo res", await userinfo.text());
}
}