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

如何在Python Telethon中无终端输入发送验证码并完成登录?

如何在无终端输入提示下实现Telethon手机号绑定流程?

问题描述

我正在为网站用户开发Telethon手机号绑定功能,预期流程如下:

  1. 用户在site.com/add_phone/页面输入手机号,后端调用client.send_code_request(phone)发送验证码请求;
  2. 用户在site.com/add_phone_2/页面输入验证码,后端调用client.sign_in(phone, code)完成登录绑定。

但测试时遇到了麻烦:

  • 最初直接调用send_code_request,终端弹出提示“Please enter your phone (or bot token)”,没法自动发验证码;
  • 后来试了client.start(phone)能自动发验证码,但调用client.start(phone, code)时,终端还是会弹出“Please enter the code you received:”的输入提示,做不到无交互自动登录。

现在需要实现完全没有终端输入提示的验证码请求和登录流程。

解决方案

要实现无交互的Telethon登录,核心是绕开client.start()的交互式逻辑,手动处理验证码请求和登录步骤,同时管理好客户端的会话状态。

1. 初始化客户端

初始化时指定会话文件路径,每个用户对应唯一的会话文件(比如用用户ID命名),避免会话冲突:

from telethon import TelegramClient

api_id = 你的API_ID
api_hash = '你的API_HASH'
# 用用户唯一标识作为会话名,比如用户ID
session_name = f"user_{user_id}_session"

client = TelegramClient(session_name, api_id, api_hash)

2. 发送验证码请求(对应add_phone/页面)

直接调用send_code_request,先确保客户端已连接,不会触发终端提示:

# 同步方式连接客户端
client.connect()
if not client.is_user_authorized():
    # 发送验证码,返回结果里包含关键的phone_code_hash
    code_result = client.send_code_request(phone_number)
    # 把phone_code_hash存到数据库,关联当前用户和手机号,后续登录要用
    save_to_db(user_id, phone_number, code_result.phone_code_hash)
client.disconnect()

重点:send_code_request返回的phone_code_hash必须保存,登录时必须传入这个hash才能验证通过。

3. 用验证码完成登录(对应add_phone_2/页面)

从数据库取出之前保存的phone_code_hash,调用sign_in完成无交互登录:

client.connect()
if not client.is_user_authorized():
    # 从数据库获取保存的phone_code_hash
    phone_code_hash = get_from_db(user_id, phone_number)
    # 传入手机号、验证码和phone_code_hash完成登录
    client.sign_in(phone=phone_number, code=verification_code, phone_code_hash=phone_code_hash)
# 登录成功后,会话会自动保存到指定的会话文件里
client.disconnect()

关键注意事项

  • 别用client.start():这个方法内置了交互式输入逻辑,专门给本地调试用的,不适合服务端无交互场景;
  • 会话文件要隔离:每个绑定的用户单独用一个会话文件,防止不同用户的会话数据互相覆盖;
  • 处理两步验证:如果用户开启了2FA,登录时还需要调用client.sign_in(password=user_2fa_password),同样可以无交互完成,只要用户提供了密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:46:22