注册新用户会覆盖当前用户会话 - 为什么?

时间:2013-07-01 13:20:21

标签: c# servicestack

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

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

  • 用户在同一浏览器的两个单独的标签页中浏览我网站的登录页面。
  • 在第一个标签中,用户登录并正确地重定向到我的主页。
  • 在第二个选项卡中,用户遵循我的注册逻辑(不需要任何类型的页面刷新,所有这些都是通过客户端代码完成的,最终在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随注册请求一起发送,导致上述代码中的existingUser变量填充该用户的UserAuth,然后使用注册用户进行更新的信息。

有谁可以解释为什么代码是用这种方式编写的?如果不用我自己的实现替换RegistrationService,有什么方法吗?

1 个答案:

答案 0 :(得分:0)

此功能允许您将不同的Auth Providers自动合并到ServiceStack中的同一帐户。