部署Flask时,Python Telegram脚本的身份验证输入方案咨询
Telegram登录验证码问题解决方案
一、是否存在无需验证码的身份验证方式?
没有完全无需验证码的登录方式,但如果已保存有效会话文件(即你代码中的sfile),且会话未过期、账号无安全风险,后续连接时会自动通过会话文件完成登录,无需再次输入验证码。
但如果是首次登录、会话文件丢失/过期、账号触发安全验证,必须通过验证码完成身份校验。
二、云部署Flask应用时输入验证码的可行方案
1. 通过Flask接口接收验证码
编写一个简单的POST接口,用于接收外部传入的验证码,脚本阻塞等待验证码输入:
from flask import Flask, request import threading import asyncio app = Flask(__name__) verification_code = None code_event = threading.Event() # 接收验证码的接口 @app.route('/submit-code', methods=['POST']) def submit_code(): global verification_code verification_code = request.json.get('code') code_event.set() return {'status': 'success'} # 获取验证码的阻塞方法 def get_verification_code(): code_event.wait() return verification_code # 启动Flask和Telegram客户端 if __name__ == '__main__': # 后台启动Flask服务 threading.Thread(target=app.run, kwargs={'host': '0.0.0.0', 'port': 5000}).start() loop = asyncio.get_event_loop() # 假设get_connection函数支持传入验证码获取方法 client = loop.run_until_complete( get_connection(sfile, api_id, api_hash, phone, get_verification_code) )
部署完成后,通过POST请求(如curl、Postman或简单前端页面)向http://你的云服务IP:5000/submit-code发送包含验证码的JSON数据即可。
2. 通过环境变量传递验证码
适合一次性登录场景,先在云服务中设置环境变量,再让脚本读取:
import os def get_verification_code(): # 从环境变量中读取验证码 return os.getenv('TG_VERIFICATION_CODE')
登录前在云服务器执行:
export TG_VERIFICATION_CODE=你的验证码
启动脚本后会自动读取该变量完成验证,验证成功后保存会话文件,后续登录无需重复操作。
3. 通过自定义Telegram Bot转发验证码
若需长期部署,可创建一个Telegram Bot,当脚本需要验证码时,向Bot发送验证码消息,Bot将消息内容转发给Flask应用。这种方式需要额外编写Bot的消息监听逻辑,适合需要频繁处理验证的场景。
内容的提问来源于stack exchange,提问作者Natasha Koh
相关产品推荐
相关产品推荐

