【发布时间】:2021-06-28 22:24:10
【问题描述】:
我正在使用 OWIN 创建用户。问题是,在创建帐户时...如果用户已经存在,我会手动签入我的数据库。经常发生的情况是,如果用户点击两次、三次甚至更多次,它会显示“您的帐户已经创建”错误,并且不会自动重定向它们。此外,它还会创建我保存到另一个 SQL 表中的数据的重复负载,该表用于新用户注册。
这是用户点击时执行的代码
if (!u.userExists(email))
{
var created = um.CreateUser(email, email, password, firstName, lastName, country, ip);
if (created == true)
{
u.subscribeSIB(email, firstName, lastName, country);
Response.RedirectPermanent("/members/");
}
else
{
ipTop.Text = "<span class=\"text-danger mt-3\">An Error Occured</span>";
}
}
else // acc exists
{
ipTop.Text = "<span class=\"text-danger mt-3\">Sorry - it seems you've already made an account before. <a href=\"/login\">Sign In</a>.</span>";
}
这是检查用户是否存在的代码
public bool userExists(string email)
{
var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
var useremail = userManager.FindByEmail(email);
if (useremail == null)
{
return false;
}
return true;
}
我应该如何停止重复和多次触发?
【问题讨论】:
-
您必须进行两级检查。使用javascript进行一次检查以避免双击,第二级使用互斥锁阻止双重提交的代码
-
我看不出创建新帐户的例程会有什么问题。我的意思是如果帐户已经存在,为什么不直接重定向到登录页面呢?额外的点击真的无关紧要,用户将被引导到一个新页面。我想你可以在 OnClientClick 事件中去 OnClientClick($('#myBtton').hide(); 因此,当他们点击一次时,按钮将隐藏,直到页面被服务器处理,因此多次点击可以'不会发生。但真正的问题是,如果它们已经存在,为什么还要留在那个页面上?发送它们去登录或其他什么。
-
@Aristos,如何使用 asp.net 工具箱按钮来完成?