4

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

我的问题如下(我知道这有点极端):

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

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

4

1 回答 1

0

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

于 2013-07-01T14:52:48.070 回答