場景
keycloak出現"用戶已登錄"的界面的場景我們需要先搞清楚,主要是這樣的操作:
- 用戶打開一個瀏覽器,在上面同時打開多個登錄窗口
- 用戶先在一個窗口上進行登錄
- 用戶再第二個窗口上再進行登錄
- 這時,出現用戶已經登錄,事實上,在kc上,如果你已經登錄了,則不能再使用其它用戶登錄了
原因
- 同一個瀏覽器在同一個kc realm下,它的sessionid是相同的,所以被認為一個用戶,不支持多個用戶的sessionid
多用戶登錄改進
如果希望kc支持在一個用戶登錄后,再刷新第二個界面的登錄頁,再使用第二個用戶才能登錄。
單用戶不出現用戶已登錄
- 前端ftl模板添加session狀態檢查
- 如果cookie中存的sessionid已經登錄,而進行redirect_uri
- 如果沒有登錄,再走正常的登錄邏輯
- 前端登錄代碼
function confirmSession(callback) {
$.get("/auth/realms/your-realms/session-exist", function (o) {
console.log(o);
if (o.exist) {
location.href = getQueryVariable("redirect_uri");
} else {
callback();
}
});
}
function login_f() {
confirmSession(function () {
document.getElementById("kc-form-login").submit();
})
}