Closed6
You need to call liff.login first. がローカルで出る
"@line/liff": "2.24.0",
先日ハッカソンのメンターをしている時にも同じエラーに遭遇した記憶がある。
(その際は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ヶ月前にクローズされました