私は電報クライアントに取り組んでおり、最初に電報認証を追加する必要があります。私がそれをどのように実装したか私のコードがあります:
async def get_telegram_client(session: str = None) -> TelegramClient:
return TelegramClient(
StringSession(session),
api_id=settings.TELEGRAM_API_ID,
api_hash=settings.TELEGRAM_API_HASH
)
@router.post('/code')
async def send_authorizarion_code(payload: TelegramSendCode):
client = await get_telegram_client()
await client.connect()
try:
await client.send_code_request(payload.phone)
except FloodWaitError as e:
return {
'FloodWaitError': {
'phone_number': e.request.phone_number,
'seconds': e.seconds
}}
else:
return {
'msg': 'code sent',
'session': client.session.save()
}
@router.post('/auth')
async def authorize(payload: TelegramAuth):
client = await get_telegram_client(payload.session)
await client.connect()
await client.send_code_request(payload.phone)
await client.sign_in(code=payload.code, phone=payload.phone)
return {'msg': 'signed in'}
しかし、問題は、sign_in() メソッドでは send_code_request() メソッドを最初に呼び出す必要があることです。そのため、エンドポイントの authorize() で、同じセッションで 2 回目に呼び出しています => ユーザーは 2 つの同じコードを受け取ります。
2 つの API エンドポイントでテレグラム認証フローを記述し、sign_in() の前に send_code_request() メソッドを実行しないようにするにはどうすればよいですか?