跳转至

账号删除

2021 年 10 月,Apple 宣布,从 2022 年 1 月 31 日起,所有允许用户创建账号的应用都必须提供在应用内发起账号删除的方式。让终端用户对自己的数据拥有更多控制权,也是一种良好的设计。

2022 年 1 月 22 日,Apple 决定将截止日期延长至 2022 年 6 月 30 日。

在用户设置中显示「删除账号」按钮

在预置的用户设置页面中,您可以显示一个按钮,供终端用户发起账号删除。当您在项目中启用账号删除功能后,用户就可以在用户设置页面的高级设置下看到 Delete Account(删除账号)按钮。

用户设置页面中的"删除您的账号"按钮

启用此按钮的步骤:

  1. 在管理台中进入高级 -> 账号删除页面
  2. 启用该按钮,然后点击保存

请注意,如果启用此功能,您需要做好准备:每当用户在移动应用中关闭用户设置时,都可能遇到会话失效的情况。如果用户在用户设置中决定删除账号,其所有会话都会立即失效。

每次关闭用户设置时,您都必须验证会话的有效性。SDK 中的 open 方法是阻塞式的,您可以在该方法执行完成后验证用户会话是否仍然有效。以下是使用 React Native SDK 的示例:

// This method blocks until the user closes User Settings.
await authgear.open(Page.Settings);
// One way to verify the validity of the session is to get User Info once.
await authgear.fetchUserInfo();
// This method blocks until the user closes User Settings.
await authgear.open(SettingsPage.settings);
// One way to verify the validity of the session is to get User Info once.
await authgear.getUserInfo();
// This method blocks until the user closes User Settings.
await authgear.OpenAsync(SettingsPage.Settings);
// One way to verify the validity of the session is to get User Info once.
await authgear.FetchUserInfoAsync();

通过 Authany SDK 打开账号删除页面

现在,您可以直接通过 Authany SDK 打开账号删除页面。该页面将在 WebView 中打开。

在调用该函数之前,您必须先在管理台 -> 高级 -> 账号删除中启用该按钮。

以下代码示例展示了如何通过 Authany SDK 打开账号删除页面:

authgear
  .deleteAccount({
    redirectURI: "<POST_DELETE_REDIRECT_URI>", 
    //the same redirectURI as in authentication
    colorScheme: colorScheme as ColorScheme,
  })
_authgear.deleteAccount(
        redirectURI: "<POST_DELETE_REDIRECT_URI>",
        //the same redirectURI as in authentication
 );
SettingsActionOptions options = new SettingsActionOptions(
        "<POST_DELETE_REDIRECT_URI>"
        //the same redirectURI as in authentication
);
options.setColorScheme(getColorScheme());
mAuthgear.deleteAccount(options, new OnOpenSettingsActionListener() {
    @Override
    public void onFinished() {
        mIsLoading.setValue(false);
        Log.d(TAG, "deleteAccount finished");
    }

    @Override
    public void onFailed(Throwable throwable) {
        Log.d(TAG, throwable.toString());
        mIsLoading.setValue(false);
        setError(throwable);
    }
});
authgear?.deleteAccount(
    colorScheme: self.colorScheme,
    redirectURI: "<POST_DELETE_REDIRECT_URI>"
    //the same redirectURI as in authentication
) { result in
    switch result {
    case .success:
        self.successAlertMessage = "Deleted account successfully"
    case let .failure(error):
        self.setError(error)
    }
}

已停用用户

当终端用户发起账号删除后,其账号将被停用,并在宽限期结束后计划删除。

已停用的用户始终处于已禁用状态,无法完成身份验证流程。is_deactivated 状态表示 is_disabled 状态是由终端用户自己(而非管理员)设置为 true 的。

计划删除

您可以设置宽限期,即用户账号在从系统中删除之前保持停用状态的时长。默认值为 30 天,您可以在 1 到 180 天之间选择。

通过管理台发起删除

终端用户账号也可以通过管理台删除。在用户管理页面中,点击移除用户按钮即可立即移除用户或计划删除。

通过 Admin API 发起删除

另外,如果您没有在用户设置中启用 Delete Account(删除账号)按钮,也可以自行在应用中实现该按钮。您可以选择计划删除或立即删除。

计划删除

您的后端服务器可以通过 Admin API 调用 scheduleAccountDeletion mutation 来发起账号删除。

示例如下:

GraphQL

mutation {
  scheduleAccountDeletion(input: {
    userID: "USER_ID"
  }) {
    user {
      id
      isDisabled
      isDeactivated
      disableReason
      deleteAt
    }
  }
}

立即删除

您的后端服务器可以通过 Admin API 调用 scheduleAccountDeletion mutation 来发起账号删除。

示例如下:

GraphQL

mutation {
  deleteUser(input: {
    userID: "USER_ID"
  }) {
    deletedUserID
}

Webhook 事件

您可以监听以下事件,将删除行为集成到您的应用中。

非阻塞事件

  • user.disabled
  • user.reenabled
  • user.deletion_scheduled
  • user.deletion_unscheduled
  • user.deleted

阻塞事件

  • user.pre_schedule_deletion

事件详情请参阅 Webhooks。