我在使用我的应用注册新用户时遇到了一个问题。这种行为看起来是设计使然,但我不明白为什么。
我的问题如下(我知道这有点极端):
- 用户在同一浏览器的两个单独选项卡中浏览到我网站的登录页面。
- 在第一个选项卡中,用户登录并正确重定向到我的主页。
- 在第二个选项卡中,用户遵循我的注册逻辑(不需要任何类型的页面刷新,这一切都由客户端代码完成,最终以 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 吗?