如何通过GitHub GraphQL API v4验证用户是否使用默认头像
如何通过GitHub GraphQL API v4判断用户是否使用默认头像
GitHub GraphQL API v4本身没有提供直接标识用户是否使用默认头像的字段,但可以通过解析返回的avatarUrl来判断。
核心判断逻辑
GitHub的默认头像基于用户数字ID生成,URL格式通常是:https://avatars.githubusercontent.com/u/<用户数字ID>?v=4
(也可能是不带v=4参数的基础形式)
而用户上传自定义头像后,avatarUrl会包含额外的随机哈希参数,格式类似:https://avatars.githubusercontent.com/u/<用户数字ID>?s=64&v=4&<随机字符串>
实现步骤
- 扩展你的GraphQL查询,同时获取用户的全局ID(用来转换为数字ID):
{ user(login: "username") { avatarUrl id # 全局ID,需要解码得到数字ID } }
- 处理返回结果:
- 将全局ID解码为数字ID:GitHub的全局ID是Base64编码格式(比如
MDQ6VXNlcjE2ODA4OTY=),解码后会得到User:1680896,从中提取数字部分就是用户的数字ID。 - 解析
avatarUrl,提取其中的用户数字ID(从/u/后到第一个?或结尾的部分)。 - 检查URL的查询参数:如果只有
v参数(或无参数),说明是默认头像;如果有其他额外参数(比如随机哈希),则是自定义头像。
- 将全局ID解码为数字ID:GitHub的全局ID是Base64编码格式(比如
示例验证代码(以Python为例)
import base64 def get_numeric_user_id(global_id): # 解码GitHub全局ID得到数字ID decoded = base64.b64decode(global_id).decode('utf-8') return decoded.split(':')[1] def is_default_avatar(avatar_url, numeric_user_id): # 提取URL中的用户ID部分 url_user_id = avatar_url.split('/u/')[1].split('?')[0] # 确保URL中的ID和用户实际ID匹配 if url_user_id != numeric_user_id: return False # 处理查询参数 if '?' not in avatar_url: return True query_part = avatar_url.split('?')[1] params = query_part.split('&') # 只允许v参数存在 valid_params = [p for p in params if p.startswith('v=')] return len(params) == len(valid_params)
内容的提问来源于stack exchange,提问作者Niraj Gautam
相关产品推荐
相关产品推荐

