talebook已经默认支持了一些社交平台的OAuth登录(QQ、Amazon、github、微信、微博)

按照我的实际使用,我是使用Authentik做统一认证的,因此还需要修改talebook使其支持自定义的OAuth登录。

经过分析,talebook是调用python的第三方的登录库,而不是自己开发的SDK。

因此可以直接进入容器,修改对应的python库,这样子talebook调用的时候就可以使用最新修改的了。

修改和替换库

依旧按照以往的做法,因为是docker版本,我还是倾向最小修改:修改现有的库。

我这里选择修改github.py,位置在容器的:/usr/local/lib/python3.13/dist-packages/social_core/backends/github.py

如果是国内使用的话,其实QQ还是会有概率用到的,但是github基本不会。

下载修改好的github.py文件:

该部分仅登录用户可见

将文件中的这些URL改成你的服务器:

    API_URL = "https://example.com/application/o/你的应用/"
    AUTHORIZATION_URL = "https://example.com/application/o/authorize/"
    ACCESS_TOKEN_URL = "https://example.com/application/o/token/"
    USERINFO_URL = "https://example.com/application/o/userinfo/"

这个文件除了修改后端服务器外,还新增了name字段和头像链接字段,将昵称一并输入到talebook中。这里的头像字段还不能生效,还需要进行下一步修改。

替换到容器中指定位置,这里要提前进容器确认一下python版本是否有改变,文件位置是否有改变。

修改tablebook核心

修改用户注册相关代码,将Authentik返回的头像地址一并录入到talebook中。

原始代码/var/www/talebook/webserver/models.py中,头像地址是硬编码在init_avatar 方法里的:

def init_avatar(self, social_user):
    anyone = "http://tva1.sinaimg.cn/default/images/default_avatar_male_50.gif"
    url = social_user.extra_data.get("profile_image_url", anyone)
    self.avatar = url.replace("http://q.qlogo.cn", "//q.qlogo.cn")

    if social_user.provider == "github":
        self.avatar = "https://avatars.githubusercontent.com/u/%s" % social_user.extra_data["id"]

这里要将github的特判删除:

# 删除这两行即可
if social_user.provider == "github":
        self.avatar = "https://avatars.githubusercontent.com/u/%s" % social_user.extra_data["id"]

修改完这两个文件后,就可以到tablebook的系统设置中添加github登录了。

输入ID和key就可以了。

补充

talebook的回调地址:https://example.com/auth/complete/github.do

登录页跳转地址:https://example/auth/login/github

最后修改:2026 年 09 月 06 日
如果觉得我的文章对你有用,请随意赞赏