Closed6

You need to call liff.login first. がローカルで出る

ようかんようかん

LIFFで初期化処理を実装し、LIFF Mockを使ってローカル開発を簡単にしようとした矢先にログインしろとエラーが出る。

ようかんようかん

先日ハッカソンのメンターをしている時にも同じエラーに遭遇した記憶がある。
(その際はCDN版に切り替えたら動いた)かなんかで解決してしまったが、多分出やすいエラーの割には全然解決策がなかったので調べてみた。

ようかんようかん

動かないコード

      const isDev = process.env.NODE_ENV === 'development';
      const liff = (await import('@line/liff')).default;
      const liffId = process.env.NEXT_PUBLIC_LIFF_ID || '';

      liff.use(new LiffMockPlugin());

      await liff.init({
        liffId: liffId,
        // @ts-ignore
        mock: isDev,
      });

      if (idDev || liff.isLoggedIn()) {
        // mock:trueになっているはずなのでBrownの名前が取れるはずなのに取れない。ここでエラー
        const profile = await liff.getProfile();
        setLineProfile(profile);
        console.log('LIFF getProfile succeeded:', profile);
      } else {
        console.log('LIFF getProfile failed');
        if (liff.isInClient()) {
          liff.login();
        }
      }
ようかんようかん

動いたコード(たったこれだけ)

const isDev = process.env.NODE_ENV === 'development';
      const liff = (await import('@line/liff')).default;
      const liffId = process.env.NEXT_PUBLIC_LIFF_ID || '';

      liff.use(new LiffMockPlugin());

      await liff.init({
        liffId: liffId,
        // @ts-ignore
        mock: isDev,
      });

+    if(!liff.isLoggedIn()){
+       liff.login();
+     }

      const profile = await liff.getProfile();
      setLineProfile(profile); // {displayName: 'Brown', userId: '123456789', statusMessage: 'hello'}
ようかんようかん

liff.initにログインが含まれているはず、Mockなのでログインされているはずみたいな勝手な先入観の問題だった。原因はシンプルにエラー文通りだった。

このスクラップは4ヶ月前にクローズされました