我在使用我的应用程序注册新用户时遇到了问题。该行为看起来是设计使然,但我不明白为什么。
我的问题如下(我知道这有点边缘情况):
- 用户在同一浏览器的两个单独选项卡中浏览到我网站的登录页面。
- 在第一个选项卡中,用户登录并正确重定向到我的主页。
- 在第二个选项卡中,用户遵循我的注册逻辑(不需要任何类型的页面刷新,这一切都是通过客户端代码完成的,最终以 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);
一旦第一个用户登录,该用户的 session cookie 将与注册请求一起发送,导致上面代码中的 existingUser 变量被该用户的 UserAuth 填充,然后用注册用户更新详情。
谁能解释一下为什么要这样写代码?如果不使用我自己的实现替换 RegistrationService,是否有任何解决方法?
最佳答案
此功能可让您将不同的 Auth Provider 自动合并到 ServiceStack 中的同一帐户中。
关于c# - 注册新用户会覆盖当前用户 session - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405462/