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
相关产品推荐
相关产品推荐

