アプリに新規ユーザーを登録する際に問題が発生しました。動作は仕様のようですが、理由がわかりません。
私の問題は次のとおりです(そして、それは少しエッジケースであることを知っています):
- ユーザーは、同じブラウザーの 2 つの別々のタブでサイトのログイン ページを参照します。
- 最初のタブで、ユーザーがログインし、ホームページに正しくリダイレクトされます。
- 2 番目のタブで、ユーザーは私のサインアップ ロジックに従います (ページの更新は一切必要ありません。組み込みの ServiceStack RegistrationService の /register エンドポイントへの jQuery AJAX POST で最高潮に達するクライアント側コードですべて完了します)。
新しいユーザーを作成する代わりに、2 番目のユーザーの詳細がログインしているユーザーの 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 を自分の実装に置き換えずに回避する方法はありますか?