调用 GitLab API 永久删除用户

在 GitLab 后台删除用户默认只能是个软删除,软删除掉的用户会变成恶心的 Ghost 用户显示在用户列表上,这个 Ghost 用户在界面上还找不到删除的地方,所以只能调 API 去硬删除需要删除的用户了。

一、查看 API 的版本号

https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/api/api.rb

图 1

从上图可以看出,v3已经不被支持了,所以版本号应该是v4

二、构造 API 的 BASE_URL

因为版本号是v4,所以BASE_URL = https://git.xxx.com/api/v4

三、获取 AccessToken

得到BASE_URL之后还得知道 AccessToken 是多少,所以得用 Admin 身份登录后台。登录之后,点击右上角的菜单,选择Settings,然后点击左侧导航菜单的Access Tokens,然后在右侧填写你访问这个 API 的应用程序的名称(可以随便填)和 API 的过期时间(尽量设置较短时间),然后在 Scopes 选择下面选择api表示我们生成的 access token 只用于调用 API,然后点击Create personal access token按钮创建 AccessToken。

图 2

生成 access token 之后我们需要复制保持一下,因为我们只有一次查看 access token 的机会,如果你忘了就只能重新生成了。

图 3

四、查询要删除的用户的 id

有了BASE_URLAccess_Token之后,就可以愉快地调用 API 了。例如我想删除那个叫root的家伙,但如果在管理后台里面删,它就会变成Ghost用户,到时候调 API 都删不掉,所以我们要直接调 API 删它,所以先要找到这个家伙的 id。

获取指定名称的用户的信息

GET /users?username={username}

于是,我们就可以就可以构造这样的请求:

GET {BASE_URL}/users?private_token={access_token}&username={username}

替换变量后就得到如下地址:

https://git.xxx.com/api/v4/users?private_token=abcdefg&username=ghost

请求上面地址后,我们就得到了这个用户的信息:

图 4

五、永久地删除指定 id 的用户

第四步查询到用户的 id 是 4,所以我们可以调用删除用户的 API 去删掉它。

删除用户的 API

图 5

注意看 hard_delete 参数,虽然它是可选的,但是如果我们要永久删除某个用户,那就必须要带上这个参数,否则我们要删除的用户就会像以前一样变成 Ghost 用户。 所以,我们构造的 API 应该是:

DELETE {BASE_URL}/users/{id}?private_token={access_token}&hard_delete=true

执行 Request Method 为DELETE,然后调用 API,返回状态码 204 即表示删除成功。然后我们再来重新查询一下用户列表,发现已经没有 root 这个用户了。