문서 메뉴

문서 홈애플리케이션 개발Atlas Device SDK

사용자 인증 - Flutter SDK

이 페이지의 내용

  • 시작하기 전에
  • 새 사용자 계정 등록
  • 로그인
  • 익명의 사용자
  • 이메일/비밀번호 사용자
  • 사용자 지정 JWT 사용자
  • API 키 사용자
  • 사용자 지정 기능 사용자
  • Facebook 사용자
  • Google 사용자
  • Apple 사용자
  • 토큰 만료 새로 고침
  • 사용자 로그아웃
  • 현재 사용자 조회

Atlas App Services는 활성화된 인증 제공자를 사용하여 사용자를 인증하기 위한 API를 제공합니다.자격 증명 인스턴스화 객체를 생성하고 이를 App.logIn() 에 전달합니다. 사용자 인증 및 생성 해당 사용자에 대한 객체입니다. 각 인증 제공자는 Credentials 해당 인증 제공자의 객체를 인스턴스화하는 데 사용되는 정적 생성자 메서드에 해당합니다.

  1. App Services 앱을 생성합니다.

  2. 하나 이상의 App Services 인증 제공자를 활성화하고 구성합니다.

Realm은 인증 제공자에 따라 계정을 다르게 등록합니다.

  • 익명 사용자를 등록할 필요는 없습니다.

  • 이메일/비밀번호 사용자를 등록하려면 이메일/비밀번호 사용자 등록을 참조하세요.

  • Google, Facebook, Apple 또는 사용자 지정 JWT 인증을 사용하는 경우 이러한 타사 서비스에서 등록을 처리합니다.

App.logIn()을사용하여 사용자를 인증할 수 있습니다.

성공하면 app.logInUser 객체를 반환합니다.

익명 인증 제공자 를 통해 사용자는 영구적인 개인 정보를 저장하지 않는 단기 계정으로 애플리케이션에 로그인할 수 있습니다. 익명 인증으로 로그인하려면 Credentials.anonymous() 를 호출하여 익명 자격 증명을 생성합니다. 생성된 자격 증명을 에 app.logIn 전달합니다.

final anonCredentials = Credentials.anonymous();
await app.logIn(anonCredentials);

두 명 이상의 익명 사용자를 원할 경우 추가 익명 자격 증명을 생성할 때 reuseCredentials: false를 설정합니다.

final anonUser = await app.logIn(Credentials.anonymous());
final otherAnonUser =
await app.logIn(Credentials.anonymous(reuseCredentials: false));

이메일/비밀번호 인증 제공자 를 통해 사용자는 이메일 사용자 이름과 비밀번호로 애플리케이션에 로그인할 수 있습니다. 이메일/비밀번호 인증으로 로그인하려면 Credentials.emailPassword() 를 호출하여 이메일/비밀번호 자격 증명을 사용자의 이메일과 비밀번호로 그런 다음 자격 증명을 에 전달합니다.app.logIn

final emailPwCredentials =
Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd");
await app.logIn(emailPwCredentials);

App Services 이메일/비밀번호 인증 사용의 전체 흐름에 대해 자세히 알아보려면 이메일/비밀번호 사용자를 참조하세요.

사용자 지정 JWT 인증 제공자 를 구성한 경우 외부 인증 제공자의 JWT 자격 증명을 사용하여 로그인할 수 있습니다.

사용자 지정 JWT 인증으로 로그인하려면 Credentials.jwt() 를 호출하여 JWT 자격 증명을 생성합니다. JWT 문자열에서. 그런 다음 자격 증명을 에 app.logIn 전달합니다.

final token = await authenticateWithExternalSystem();
final jwtCredentials = Credentials.jwt(token);
final currentUser = await app.logIn(jwtCredentials);

API 키 인증 을 활성화한 경우 클라이언트 또는 서버 API 키를 사용하여 로그인할 수 있습니다.

API 키 인증으로 로그인하려면 ApiKey 를 생성합니다.Credentials.apiKey() 를 호출하여 API 키 문자열에서. 그런 다음 자격 증명을 에 app.logIn() 전달합니다.

final apiKeyCredentials = Credentials.apiKey(myApiKey);
final apiKeyUser = await app.logIn(apiKeyCredentials);

자격 증명에 사용할 서버 API 키를 생성하려면 서버 API 키 생성 문서를 참조하세요.

현재 로그인한 사용자와 동일한 권한을 가진 사용자 API 키로 작업하려면 User.apiKeys 클라이언트를 사용합니다. 사용자 API 키를 생성, 가져오기, 삭제, 비활성화 및 활성화할 수 있습니다.

// Create user API key
final apiKey = await user.apiKeys.create("api-key-name");
// Get existing user API key by ID
// Returns `null` if no existing API key for the ID
final refetchedApiKey = await user.apiKeys.fetch(apiKey.id);
// Get all API keys for a user
final apiKeys = await user.apiKeys.fetchAll();
// Disable API key
await user.apiKeys.disable(apiKey.id);
// Check if API key is enabled
print(apiKey.isEnabled); // prints `false`
// Enable API key
await user.apiKeys.enable(apiKey.id);
// Delete a user API key
await user.apiKeys.delete(apiKey.id);

사용자 지정 함수 인증 제공자 를 구성한 경우 Atlas Function에서 처리하는 사용자 지정 인증 로직을 사용하여 로그인할 수 있습니다.

사용자 지정 함수 인증으로 로그인하려면 사용자 지정 인수와 함께 문자열화된 JSON을 Credentials.function() 에 전달합니다. . 그런 다음 자격 증명을 에 app.logIn 전달합니다.

final credentials = {
"username": "someUsername",
};
// payload must be a JSON-encoded string
final payload = jsonEncode(credentials);
final customCredentials = Credentials.function(payload);
final currentUser = await app.logIn(customCredentials);

Facebook 인증 제공자 를 구성한 경우 기존 Facebook 계정을 사용하여 로그인할 수 있습니다.

Facebook 인증으로 로그인하려면 Credentials.facebook() 에 Facebook 액세스 토큰을 전달합니다. . 그런 다음 자격 증명을 에 app.logIn 전달합니다.

final facebookCredentials = Credentials.facebook(accessToken);
final currentUser = await app.logIn(facebookCredentials);

중요

Facebook 프로필 사진 URL 저장 안 함

Facebook 프로필 사진 URL에는 이미지 권한을 부여하는 사용자의 액세스 토큰이 포함되어 있습니다. 보안을 위해 사용자의 액세스 토큰이 포함된 URL을 저장하지 마세요. 대신 이미지를 가져와야 할 때 사용자의 메타데이터 필드에서 직접 URL에 액세스합니다.

Google 인증 제공자 를 구성한 경우 기존 Google 계정을 사용하여 로그인할 수 있습니다.

Google 인증 코드로 로그인하려면 Credentials.googleAuthCode() 에 Google 인증 코드를 전달합니다. . 그런 다음 자격 증명을 에 전달합니다.app.logIn

final googleAuthCodeCredentials = Credentials.googleAuthCode(authCode);
final currentUser = await app.logIn(googleAuthCodeCredentials);

Google ID 토큰으로 로그인하려면 Credentials.googleIdToken() 에 Google ID 토큰을 전달합니다. . 그런 다음 자격 증명을 에 app.logIn 전달합니다.

final googleIdTokenCredentials = Credentials.googleIdToken(idToken);
final currentUser = await app.logIn(googleIdTokenCredentials);

Apple 인증 제공자로 로그인 을 구성한 경우 기존 Apple 계정을 사용하여 로그인할 수 있습니다.

Apple 인증으로 로그인하려면 Apple 액세스 토큰을 Credentials.apple(). 그런 다음 자격 증명을 에 전달합니다.app.logIn

final appleCredentials = Credentials.apple(idToken);
final currentUser = await app.logIn(appleCredentials);

token contains an invalid number of segments(이)라는 Login failed 오류가 발생하면 JWT의 UTF-8 인코딩 문자열 버전을 전달하고 있는지 확인하세요.

새로 고침 토큰은 일정 시간이 지나면 만료됩니다. 새로 고침 토큰이 만료되면 액세스 토큰을 더 이상 새로 고칠 수 없으며 사용자는 다시 로그인해야 합니다.

Realm이 열린 후 새로 고침 토큰이 만료되면 사용자가 다시 로그인할 때까지 장치를 동기화할 수 없습니다. 동기화 오류 처리기는 동기화를 시도할 때 토큰 만료 오류를 포착한 다음 사용자를 로그인 흐름으로 리디렉션하는 로직을 구현해야 합니다.

새로 고침 토큰 만료 구성에 대한 자세한 내용은 App Services 문서에서 사용자 세션 관리를 참조하세요.

인증 제공자에 관계없이 User.logOut()을 사용하여 모든 사용자를 로그아웃시킬 수 있습니다. 이 메서드는 다음과 같습니다.

  • 장치에서 로컬로 저장된 사용자 자격 증명을 삭제합니다.

  • 사용자 Realm과의 모든 동기화를 즉시 중지합니다.

로그아웃하면 동기화가 중단되므로 모든 로컬 Realm 업데이트가 서버에 업로드된 후에만 로그아웃해야 합니다.

await user.logOut();

인증된 사용자가 있으면 App.currentUser 를 사용하여 사용자 객체를 검색할 수 있습니다. 속성.currentUser 객체는 로컬 저장소에 유지되므로 초기 인증 후 앱이 종료되더라도 logIn 사용자가 로그아웃하지 않는 한 를 다시 호출할 필요가 없습니다.

final user = app.currentUser;
← 사용자 관리 - Flutter SDK