Python 2 不再受社区支持。我们建议您将 Python 2 应用迁移到 Python 3

Python 2 版 Users API 概览

Users API 允许应用执行以下操作:

  • 检测当前用户是否已登录。
  • 将用户重定向到相应的登录页面进行登录。
  • 要求您的应用用户创建新的 Google 帐号(如果用户尚无 Google 帐号)。

当用户登录应用后,应用可以访问用户的电子邮件地址以及唯一身份用户 ID。应用还可检测当前用户是否为管理员(也称为“管理员用户”),从而轻松实现只有管理员才能访问的应用区域。

Python 2 中的用户身份验证

以下示例在用户登录后向其展示个性化问候消息和一个退出登录的链接。如果用户没有登录,应用会提供 Google 帐号的登录页面链接。

首先,导入 google.appengine.api.users 模块。

from google.appengine.api import users

然后,使用该模块获取用户的相关信息:

user = users.get_current_user()
if user:
    nickname = user.nickname()
    logout_url = users.create_logout_url('/')
    greeting = 'Welcome, {}! (<a href="{}">sign out</a>)'.format(
        nickname, logout_url)
else:
    login_url = users.create_login_url('/')
    greeting = '<a href="{}">Sign in</a>'.format(login_url)

使用 app.yaml 强制执行登录和管理员访问

如果您的某些页面要求用户登录才能访问,您可以在 app.yaml 文件中强制执行此操作。如果用户访问配置为要求登录的网址,但用户没有登录,则 App Engine 会自动将用户重定向到相应的 Google 登录页面,然后在用户成功登录或注册后,再将其重新导回到应用的网址。

处理程序配置还可以要求用户必须是应用的注册管理员;也就是说,用户必须具有 Viewer、Editor、Owner 或 App Engine Admin 角色。这样一来,您无需实现单独的授权机制,即可构建仅限管理员访问的网站区域。

如需了解如何为网址配置身份验证,请参阅 app.yaml 参考文档中有关如何要求用户登录或具备管理员身份的内容。

身份验证选项

您的应用可以使用以下选项之一来验证身份用户:

  • Google 帐号
  • 您的 Google Workspace 网域中的帐号

选择身份验证选项

在创建应用后,您可以选择要使用的身份验证选项。默认情况下,您的应用将使用 Google 帐号进行身份验证。如需选择其他选项(如 Google Workspace 网域),请在 Google Cloud Console 中转到项目的设置页面,然后点击修改。在“Google 身份验证”下拉菜单中,选择所需的身份验证类型,然后点击保存

登录和退出登录

应用可以检测用户是否已使用应用所选的身份验证选项来登录应用。如果用户没有登录,则应用可以将用户定向到 Google 帐号进行登录或者创建新的 Google 帐号。应用通过调用 Users API 的方法获取登录页面的网址。当用户访问需要进行身份验证的页面时,应用可以将此网址显示为链接,也可以发出到此网址的 HTTP 重定向。

如果您的应用使用 Google 帐号或 Google Workspace 进行身份验证,则应用的名称会在用户登录您的应用时显示在登录页面。所显示的名称是您在注册应用时指定的应用名称。您可以在 Google Cloud Console 凭据页面的应用名称字段中更改此名称。

用户登录或创建 Google 帐号后,会被重定向回您的应用。应用提供了指向生成登录网址的方法的重定向网址。

Users API 还提供一个生成网址供退出应用登录的方法。退出登录网址会从应用中撤消用户的身份验证,然后重定向回应用网址,但不显示任何内容。

用户只有在应用提示登录,并输入其帐号的电子邮件地址和密码后,才能登录应用。即使用户已使用 Google 帐号登录其他应用,也是如此。

访问帐号信息

当用户登录应用时,应用可以访问其帐号的电子邮件地址,以获取用户对应用发出的每个请求。应用还可以访问唯一标识用户的用户 ID,即使用户更改了帐号的电子邮件地址也是如此。

应用还可以确定当前用户是否为应用的管理员。“管理员”用户是指具有 Viewer、Editor、Owner 或 App Engine Admin 角色的任何用户。即使您不验证其他用户的身份,也可以使用此功能为应用创建管理功能。通过 Go、Java、PHP 和 Python API,可以轻松将网址配置为“仅限管理员访问”。

用户和数据存储区

Users Service API 可将当前用户的信息返回为 User 对象。虽然 User 对象可以作为属性值存储在数据存储区中,但我们强烈建议您不要这样做,因为此操作会将电子邮件地址和用户的唯一 ID 也包含在内。如果用户更改了其电子邮件地址,当您将其存储的旧 User 与新 User 值进行比较时,它们将无法匹配。请改为考虑将 User 用户 ID 值用作用户的固定唯一标识符。

Google 帐号和开发服务器

开发服务器使用虚构登录屏幕来模拟 Google 帐号系统。当应用调用 Users API 以获取登录屏幕网址时,该 API 会返回一个特殊开发服务器网址来提示用户输入电子邮件地址,但不提示输入密码。您可以在此提示中输入任何电子邮件地址,而应用将表现得就像您使用了拥有该地址的帐号进行了登录。

虚构登录屏幕还提供一个复选框,用于指明虚构帐号是否为管理员;也就是说,该帐号是否具有 Viewer、Editor、Owner 或 App Engine Admin 角色。如果您勾选此复选框,则应用将表现得就像您使用了管理员帐号进行了登录。

同样,Users API 返回一个用于取消虚构登录的退出登录网址。

开发服务器中 User 对象的唯一 ID 根据电子邮件地址计算得出。两个唯一的电子邮件地址始终表示开发服务器中的两个唯一身份用户。