node-kakao: TalkClient.login fails with -999

Describe the bug TalkClient.login method fails with status -999 update required

To Reproduce

const api = await AuthApiClient.create(process.env.TalkClientName, process.env.TalkClientUUID);
const loginRes = await api.login({ email: process.env.TalkClientLoginID, password: process.env.TalkClientLoginPW });
if(!loginRes.success) return console.error(`Web API Login failure: ${loginRes.status}`);

const client = new TalkClient({
  version: '3.2.7',
  appVersion: '3.2.7.2782'
});
const clientLoginRes = await client.login(loginRes.result);
if(!clientLoginRes.success) return console.error(`TalkClient Login failure: ${clientLoginRes.status}`);

TalkClient with no configs like new TalkClient({ }) on the migration-v3.md makes client with config: version: ‘3.2.3’, appVersion: ‘3.2.3.2698’

So I changed version config to my PC client’s newest version: 3.2.7.2782 since the error code is UPGRADE_REQUIRED, but the problem continues. TypeDoc says expected option should be like new TalkClient({ config: { appVersion: '3.2.7.2782' } }) but this is not changing the version.

Expected behavior Successful TalkClient login

Screenshots

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 18 (2 by maintainers)

Most upvoted comments

저도 항상 띄워두던 서비스에서 어느 순간부터 갑자기 멈춰서 이슈 올리게 됐습니다…

방금 해결해서 방법 공유합니다. 아마도 신버전에서 다시 인증을 거쳐야 하는 듯 합니다.

  1. 해당 계정을 모바일 디바이스에서 접속
  2. 기기 연결 관리 > 인증 기기 관리에서 본래 사용중인 Client Name 해제
  3. device registration

제가 작성한 코드는 아래와 같고…

import * as Kakao from 'node-kakao';
import * as Readline from 'readline';

(async function login() {
    const form = {
        email: EMAIL,
        password: PASSWORD,
        forced: true
    };

    const api = await Kakao.AuthApiClient.create(DEVICE_NAME, DEVICE_UUID);
    const apiLoginRes =  await api.login(form);

    if (apiLoginRes.success) {
        console.log(`Received access token: ${apiLoginRes.result.accessToken}`);

        const clientLoginRes = await CLIENT.login(apiLoginRes.result);

        if (!clientLoginRes.success)
            throw new Error(`Login failed with status: ${clientLoginRes.status}`);

        console.log('Login success');

    } else if (apiLoginRes.status !== Kakao.KnownAuthStatusCode.DEVICE_NOT_REGISTERED) {
        throw new Error(`Web login failed with status: ${apiLoginRes.status}`);
    
    } else {
        const passcodeRes = await api.requestPasscode(form);

        if (!passcodeRes.success)
            throw new Error(`Passcode request failed with status: ${passcodeRes.status}`);

        const inputInterface = Readline.createInterface({
            input: process.stdin,
            output: process.stdout
        });

        const passcode = await new Promise<string>((resolve) => inputInterface.question('Enter passcode: ', resolve));
    
        inputInterface.close();

        const registerRes = await api.registerDevice(form, passcode, true);

        if (!registerRes.success)
            throw new Error(`Device registration failed with status: ${registerRes.status}`);

        console.log(`Device ${DEVICE_UUID} has been registered`);
        console.log('Attempting to login...');
        login();
    }
})();

image

혹은 https://github.com/storycraft/node-kakao/blob/stable/examples/device-registration.ts 참고하시면 될 것 같습니다.

방금 해결해서 방법 공유합니다. 아마도 신버전에서 다시 인증을 거쳐야 하는 듯 합니다.

감사합니다. 해결했습니다.