사용자 객체

User 클래스의 인스턴스는 사용자를 나타냅니다. User 인스턴스는 고유하며 비교 가능합니다. 두 인스턴스가 동일한 경우 같은 사용자를 나타냅니다.

애플리케이션은 users.get_current_user() 함수를 호출하여 현재 사용자의 User 인스턴스에 액세스할 수 있습니다.

user = users.get_current_user()

앱에 사용되는 인증 옵션에 관계없이 users.get_current_user() 함수를 사용할 수 있습니다.

이메일 주소를 사용하여 User 인스턴스를 생성할 수도 있습니다.

user = users.User("Albert.Johnson@example.com")

또는 federated_identity가 있는 경우 이를 사용하여 User 인스턴스를 만들 수 있습니다.

user = users.User(federated_identity="http://example.com/id/ajohnson")

유효한 Google 계정에 해당하지 않는 이메일 주소로 User 생성자를 호출하는 경우 객체는 생성되지만 실제 Google 계정에 상응하지 않게 됩니다. 객체가 저장된 이후에 누군가가 해당 이메일 주소로 Google 계정을 만드는 경우에도 마찬가지입니다. 생성 당시 Google 계정을 나타내지 않는 이메일 주소를 사용하는 User 값은 절대로 실제 사용자를 나타내는 User 값과 일치하지 않습니다.

개발용 웹 서버에서 실행할 때 모든 User 객체는 (시뮬레이션된) 데이터 저장소에 저장될 때 유효한 Google 계정을 나타내는 것으로 간주됩니다.

유효한 사용자의 User 객체는 사용자의 고유 ID 값을 제공할 수 있습니다. 이 값은 사용자가 이메일 주소를 변경해도 그대로 유지됩니다. user_id() 메서드는 이 ID인 str 값을 반환합니다.

User 객체는 앱에 사용되는 인증 방법에 관계없이 형태가 동일합니다.

Datastore에서 사용자 값 사용

사용자 ID는 안정적이어서 키 이름 또는 문자열 속성으로 사용할 수 있습니다. 따라서 사용자 값을 사용할 때 사용자 ID 및 이메일로 통신할 수 있도록 마지막으로 본 이메일 주소를 저장해야 합니다. 아래 예시는 현재 사용자와 사용자 ID를 비교하는 방법입니다.

class ModelWithUser(ndb.Model):
    user_id = ndb.StringProperty()
    color = ndb.StringProperty()

    @classmethod
    def get_by_user(cls, user):
        return cls.query().filter(cls.user_id == user.user_id()).get()

UserProperty에는 사용자의 고유 ID와 함께 이메일 주소가 포함되어 있으므로 이를 저장하지 않는 것이 좋습니다. 사용자가 자신의 이메일 주소를 변경하고 이전에 저장한 User 값과 새 User 값을 비교하면 서로 일치하지 않게 됩니다. 대신 User 사용자 ID 값을 사용자의 안정적인 고유 식별자로 사용해 보세요.