先到 custom header 新增一段代碼
這段 js 代碼的意思是,當 isLogin 的 cookie 值改變時,自動重新載入網頁
<script>
cookieStore.onchange = function(event) {
if (event.changed.some(cookie => cookie.name === "LineLogin")) {
console.log("LineLogin cookie has changed!");
window.location.reload();
}
};
</script>
接著去修改 ResponseFactory.php 把 makeResponse 的功能改掉
/public_html/vendor/flarum/core/src/Forum/Auth/ResponseFactory.php
這段代碼的意思是,當登入成功後,更新 LineLogin 的 cookie 值
將 cookie LineLogin 設定為當前的時間
private function makeResponse(array $payload): HtmlResponse
{
$content = sprintf(
'<script>
if (window.opener) {
window.close();
window.opener.app.authenticationComplete(%s);
} else {
window.close();
const timestamp = new Date().getTime();
cookieStore.set({name: "LineLogin", value: timestamp.toString()});
window.opener.app.authenticationComplete(%s);
}
</script>',
json_encode($payload),
json_encode($payload)
);
return new HtmlResponse($content);
}
結果就變成
手機使用 LINE 登入 flarum
觸發 cookie LineLogin 更新
接著又觸發網頁重新載入
已知的問題:
電腦和網路慢的人
依然會看到畫面停在登入畫面
但卻顯示登入成功