注册新用户会覆盖当前用户会话-原因

本文关键字:用户 会话 原因 覆盖 新用户 注册 | 更新日期: 2023-09-27 18:20:38

我在用我的应用程序注册新用户时遇到了一个问题。这种行为看起来是故意的,但我不明白为什么。

我的问题如下(我知道这有点边缘化):

  • 用户在同一浏览器中的两个独立选项卡中浏览到我网站的登录页面
  • 在第一个选项卡中,用户登录并正确重定向到我的主页
  • 在第二个选项卡中,用户遵循我的注册逻辑(不需要任何类型的页面刷新,这一切都是通过客户端代码完成的,最终通过jQuery AJAX POST到达内置的ServiceStack RegistrationService的/register端点)

第二个用户的详细信息将覆盖已登录用户的UserAuth记录,而不是创建新用户,第一个用户将无法再登录。

查看ServiceStack.ServiceInterface.Auth.RegistrationService中的代码,这种行为似乎是100%有意的:

var session = this.GetSession();
var newUserAuth = ToUserAuth(request);
var existingUser = UserAuthRepo.GetUserAuth(session, null);
var registerNewUser = existingUser == null;
var user = registerNewUser
            ? this.UserAuthRepo.CreateUserAuth(newUserAuth, request.Password)
            : this.UserAuthRepo.UpdateUserAuth(existingUser, newUserAuth, request.Password);

一旦第一个用户登录,该用户的会话cookie就会与注册请求一起发送,从而导致上面代码中现有的user变量填充该用户的UserAuth,然后使用注册用户详细信息更新该UserAuth。

有人能解释为什么代码是这样写的吗?如果不用我自己的实现取代RegistrationService,有什么办法可以解决这个问题吗?

注册新用户会覆盖当前用户会话-原因

这是一项功能,允许您在ServiceStack中将不同的Auth Provider自动合并到同一帐户中。