0

私は電報クライアントに取り組んでおり、最初に電報認証を追加する必要があります。私がそれをどのように実装したか私のコードがあります:

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() メソッドを実行しないようにするにはどうすればよいですか?

4

0 に答える 0