You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyrogram中带双因素认证的用户会话授权问题排查

带两步验证的Telegram账号授权问题

问题背景

我拥有多个关联机器人的账号,正在开发一个独立机器人,用于将已有账号授权为用户会话,以便与BotFather交互,获取账号关联机器人信息、创建新机器人等。无两步验证密码的账号授权、会话创建/重连均正常,但开启两步验证的账号无法通过session.sign_in()完成授权(密码正确)。

初始实现及报错

机器人通过状态管理获取所有必要信息(含账号密码),伪代码如下:

data['number'] = message.text
data['app_id'] = str(message.text)
data['app_hash'] = message.text
if message.text not in [0, "0"]:
    data['password'] = message.text
    app = Client(name=f"{data['number'].lstrip('+')}", api_id=data['app_id'], api_hash=data['app_hash'], password=data["password"])
else:
    app = Client(name=f"{data['number'].lstrip('+')}", api_id=data['app_id'], api_hash=data['app_hash'])
await app.connect()

client = weakref.WeakValueDictionary()
client[data['number']] = app
sent_code_obj = await app.send_code(current_data['number'])
phone_hash = sent_code_obj.phone_code_hash
data['phone_hash'] = phone_hash
data['app'] = client

await app.sign_in(phone_number=data['number'], phone_code_hash=data['phone_hash'], phone_code=message.text)

执行后报错:

pyrogram.errors.exceptions.unauthorized_401.SessionPasswordNeeded: Telegram says: [401 SESSION_PASSWORD_NEEDED] - The two-step verification is enabled and a password is required (caused by "auth.SignIn")

尝试的其他方案及报错

我也曾尝试以下方式:

data['number'] = message.text
data['app_id'] = str(message.text)
data['app_hash'] = message.text
if message.text not in [0, "0"]:
    data['password'] = message.text
    app = Client(name=f"{data['number'].lstrip('+')}", api_id=data['app_id'], api_hash=data['app_hash'])
    await app.check_password(password=data['password'])
else:
    app = Client(name=f"{data['number'].lstrip('+')}", api_id=data['app_id'], api_hash=data['app_hash'])
await app.connect()

client = weakref.WeakValueDictionary()
client[data['number']] = app
sent_code_obj = await app.send_code(current_data['number'])
phone_hash = sent_code_obj.phone_code_hash
data['phone_hash'] = phone_hash
data['app'] = client

await app.sign_in(phone_number=data['number'], phone_code_hash=data['phone_hash'], phone_code=message.text)

执行到await app.check_password(password=data['password'])时报错:

The key is not registered in the system. Delete your session file and login again (caused by 'account.GetPassword')

疑问

请问我操作中的错误是什么?如何通过自有机器人输入密码,完成带两步验证的账号认证?


内容的提问来源于stack exchange,提问作者Prokmixa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:31