[我们有一个网络API,我们允许匿名[AllowAnonymous]用户使用我们自己的移动应用(Android和iOS)进行注册。最近,据报道有多个用户使用相同的电子邮件地址注册,这是我们不允许的。我们进行了多次检查,以防止发生这种情况。当我们检查我们的IIS日志时。我们有这样的东西:
2020-02-15 18:40:42 XXX.XXX.X.XX POST /api/Account/Register - 8082 - Y.YY.YYY.YYY OurIOSAppName/3+CFNetwork/1121.2.2+Darwin/19.3.0 - 400 0 64 69968 2020-02-15 18:40:42 XXX.XXX.X.XX POST /api/Account/Register - 8082 - Y.YY.YYY.YYY OurIOSAppName/3+CFNetwork/1121.2.2+Darwin/19.3.0 - 200 0 0 13218 2020-02-15 18:40:42 XXX.XXX.X.XX POST /api/Account/Register - 8082 - Y.YY.YYY.YYY OurIOSAppName/3+CFNetwork/1121.2.2+Darwin/19.3.0 - 200 0 0 17390
似乎我们的网络api正在使用AlamoFire接收来自iOS移动应用的多个请求,而Android的RetroFit也是如此。有没有预防的方法?
问题不是同时存在多个请求,而是您用于创建用户的代码具有竞争条件。下面的两张票只是一个开始,有很多方法可以解决此问题。
Preventing race condition of if-exists-update-else-insert in Entity Framework