keycloak~避免出現"用戶已登錄"的(de)界面
場景
keycloak出現(xian)"用戶已(yi)登錄"的界面(mian)的場景我們(men)需要先(xian)搞清楚(chu),主要是這樣的操作(zuo):
- 用戶打開一個瀏覽器,在上面同時打開多個登錄窗口
- 用戶先在一個窗口上進行登錄
- 用戶再第二個窗口上再進行登錄
- 這時,出現用戶已經登錄,事實上,在kc上,如果你已經登錄了,則不能再使用其它用戶登錄了
原因
- 同一個瀏覽器在同一個kc realm下,它的sessionid是相同的,所以被認為一個用戶,不支持多個用戶的sessionid
多用戶登錄改進
如果希(xi)望kc支持(chi)在一個用戶(hu)登錄(lu)后(hou),再刷(shua)新第二個界(jie)面(mian)的登錄(lu)頁,再使用第二個用戶(hu)才能登錄(lu)。
單用戶不出現用戶已登錄
- 前端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();
})
}