【问题标题】:Duplicating users if clicking multiple times in ASP.NET (webforms) / OWIN如果在 ASP.NET(网络表单)/OWIN 中多次单击,则会复制用户
【发布时间】: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 工具箱按钮来完成?

标签: c# asp.net webforms owin


【解决方案1】:
<asp:Button ID="MyButton" runat="server" CssClass="button" Text="Click Here" OnClientClick="$('.button').hide();" OnClick="MyButton_Click" />

您可以使用 jquery 执行上述操作。 OnClientClick 会隐藏客户端的按钮,然后回发到服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2018-09-02
    • 1970-01-01
    • 2017-02-11
    • 2012-12-03
    相关资源
    最近更新 更多