gpt4 book ai didi

javascript - SignalR 异常 "Unrecognized user identity. The user identity cannot change during an active SignalR connection."

转载 作者:搜寻专家 更新时间:2023-11-01 04:32:06 24 4
gpt4 key购买 nike

我在使用表单例份验证的 MVC 4 应用程序上启动并运行了 SignalR。我将滑动过期设置为 20 分钟的 cookie 超时。

我有一个在计时器上运行的 javascript 函数,因此在 20 分 1 秒后,它会刷新页面并将用户重定向到登录页面。出于安全原因,我这样做很重要,而且效果很好。

我的问题是 SignalR 抛出 InvalidOperation 异常,因为用户身份已更改。我明白为什么会这样,但不确定如何避免。

我试过调用 $.connection.hub.stop();在重新加载页面之前,但它不起作用。我试过在 cookie 过期前 5 秒调用它,但这只会重新激活 session 。

如有任何想法,我们将不胜感激!

谢谢约翰

最佳答案

我在 Github 上与 David Fowler(SignalR 的作者)通信,他说没有简单的方法可以解决这个问题。

为了解决这个问题,我实现了一个 Silent Logout Controller 操作,它只是终止了用户 session 。

    [HttpPost]
[AjaxOnly]
public ActionResult SilentLogOff()
{
_unitOfWork.WebSecurity.Logout();

return Json(new
{
IsSuccess = true,
});
}

然后我将 JS 计时器调整为比 Forms 身份验证超时短 10 秒。当它过期时,它会停止 SignalR 集线器连接,对 SilentLogout 操作执行 POST,然后重新加载页面。

SetLogoutTimer: function () {

var formsTimeoutValue = $("#hdnRefreshTimeout").val();

clearTimeout("formsTimeoutTimer");

var formsTimeoutTimer = setTimeout(function () {
$.connection.hub.stop();

AppName.Authenticated.SilentLogoutUser();

}, formsTimeoutValue);
}

SilentLogoutUser: function() {
var url = $("#logout a").attr("data-bind-silent-url");
$.ajax({
type: "POST",
url: url,
success: function (response) {
if (response.IsSuccess === true) {
window.location.reload(true);
}

}
});
}

这会导致正确的行为,因为没有 SignalR 异常,并且用户会在重新验证后被重定向到他们所在的上一个页面。

关于javascript - SignalR 异常 "Unrecognized user identity. The user identity cannot change during an active SignalR connection.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com