从IdentityServer4创建的后端删除用户

时间:2017-01-17 09:55:18

标签: asp.net-core asp.net-identity sql-server-2016 identityserver4

我正在使用Identity Server 4在Asp.Net Core Web应用程序中注册新的User时调试确认电子邮件流。

由于我已经注册了我的实际电子邮件,要重复使用它,我使用UserName修改了Email表中的AspNetUsersSQL Update到一些随机值。

现在我再次注册原始电子邮件。我收到了duplicate user error

result = await _userManager.CreateAsync(user, model.Password);

我已经:

  • 清除浏览器缓存。

  • 关闭本地IIS Express

  • 重新启动Visual Studio。

  • _userManager.DeleteAsync()UserName更新回原始值后使用Email,但这会为Microsoft.AspNetCore.Identity.IdentityError提供说明Optimistic concurrency failure, object has been modified

    Sql Server

    上运行此查询时

    select * from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME in ( 'UserName' , 'Email')

我得到以下内容:

AspNetUsers

我知道这不是一个混乱使用后端的好习惯,但这是开发环境,我可以继续使用另一封电子邮件。

我会请求读者帮助理解如何安全地烧焦User以便能够重复使用该电子邮件。

感谢您的时间

2 个答案:

答案 0 :(得分:1)

我同意Kyle的评论并进一步加快您的调试过程,您应该注意,如果您使用gmail执行此操作,您可以使用一封电子邮件调试此过程。

来自google / gmails perspective myaccount@gmail.com == my.acount@gmail.com == m.y.a.c.c.ount@gmail.com等等只是尝试一下,谷歌会忽略电子邮件中的所有句点字符。如果您只是枚举电子邮件地址的本地部分,则可以枚举/耗尽~2 ^ 8封电子邮件(在此示例中)。但是从您的应用程序方面来看,myaccount @ gmail.com与my.account@gmail.com不同,即它们是不同的用户帐户。基本上,您可以使用一封电子邮件来测试您的此功能,而无需删除用户。

答案 1 :(得分:0)

这是我的方法,终于通过了令人讨厌的“并发失败”错误消息...在ASP.NET CORE 2.2中有效

首先通过FindByName方法获取用户对象。 从分配的角色中删除用户(在这种情况下,我将硬编码为“ Admin”,因为这是我感兴趣的角色,但您自己填写),然后删除该用户。

        //Delete user. 
        //Obtain the user object through the FindByName method first.
        //Remove the user from their assigned Role, then delete the user.
        var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        ApplicationUser delAppUser = new ApplicationUser
        {
            Email = "SomeEmailForindividualAdminUser",
            UserName = "SomeUsernameindividualAdminUser"
        };
        Task <ApplicationUser> taskGetUserAppUser = userManager.FindByNameAsync(delAppUser.UserName);
        taskGetUserAppUser.Wait();

        Task<IdentityResult> taskRemoveFromRoleAppUser = userManager.RemoveFromRoleAsync(taskGetUserAppUser.Result, "Admin");
        taskRemoveFromRoleAppUser.Wait();

        Task<IdentityResult> taskDeleteAppUser = userManager.DeleteAsync(taskGetUserAppUser.Result);
        taskDeleteAppUser.Wait();