Telethon登录致其他会话终止,遇AUTH_KEY_UNREGISTERED问题求助
问题原因及解决办法
核心原因
- API凭证共用冲突:你脚本里的
api_id和api_hash如果和手机/桌面端Telegram用的是同一套,Telegram会判定为同一客户端重复登录,触发安全机制强制失效旧的认证密钥(auth key),导致所有关联该凭证的活跃会话被挤下线。 - 代码会话管理错误:代码嵌套了两层
with client:,外层已经完成客户端初始化和登录,内层重复的with会造成会话状态异常,进一步触发Telegram的安全检测。 - AUTH_KEY_UNREGISTERED触发逻辑:当Telegram服务器认定你的认证密钥失效(比如被强制重置),就会返回这个错误;你通过找回密码重置了账号安全凭证,所以能重新完成登录。
解决办法
- 单独申请API凭证:去my.telegram.org注册一个新应用,获取独立的
api_id和api_hash给脚本使用,和日常用的Telegram客户端凭证分开,这样两者的会话不会互相干扰。 - 修复代码的会话管理:去掉内层多余的
with client:,调整后的代码如下:
from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetHistoryRequest import config async def main(client): url = input("Input channel link: ") channel = await client.get_entity(url) messages = [] offset_msg = 0 limit_msg = 100 while True: history = await client(GetHistoryRequest( peer=channel, offset_id=offset_msg, offset_date=None, add_offset=0, limit=limit_msg, max_id=0, min_id=0, hash=0)) if not history.messages: break # 无更多消息时终止循环 for message in history.messages: print(message) offset_msg = history.messages[-1].id # 更新偏移量,获取下一页消息 if __name__ == '__main__': with TelegramClient(config.username, config.api_id, config.api_hash).start(phone=config.phone, password=config.password) as client: client.loop.run_until_complete(main(client))
- 避免频繁重复登录:测试时不要短时间内多次重启脚本或重复调用登录逻辑,Telegram会把这种行为判定为异常,触发安全限制。
- 两步验证注意事项:如果账号开启了两步验证,确保脚本里的
password参数是两步验证的密码,而非账号登录密码,避免因验证错误触发安全机制。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

