【问题标题】:Create users and roles in SQL Script with ASP.NET Identity使用 ASP.NET 标识在 SQL 脚本中创建用户和角色
【发布时间】:2016-04-25 20:31:36
【问题描述】:

我们之前使用过 Membership,现在在新项目中我们使用 Identity 进行身份验证和授权。我们能够以编程方式创建用户和角色(在 Identity 项目的 Seed 方法中)。我们还需要在应用程序 DAL 的 Seed 方法中创建用户时将这些会员用户链接到应用程序用户,例如员工。为此,我们之前使用了 SQL 脚本。现在我们需要编写类似的 SQL 脚本来创建身份用户和角色。从 SQL 脚本中,我们可以获取用户的 MembershipId,并使用此 MembershipId 值将其分配给 Employee 的 MembershipId 列。

我们遇到的问题是存储过程,例如“aspnet_Membership_CreateUser”在 Membership DB (aspnetdb) 中可用,在我们创建的 Identity DB 中不可用。

脚本如下所示:

    -- Create roles for 'XXX' Application 
    EXEC [aspnet_Roles_CreateRole] 'XXX','ADMIN'
    EXEC [aspnet_Roles_CreateRole] 'XXX','USER'

    -- Create new membership user 
    EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
    @ApplicationName = N'XXX',
    @UserName = N'testadmin@xxx.com',
    @Password = N'QhoM803ew/sdfdf/4NQ=',
    @PasswordSalt = N'dGzG1ddfdfdfk1Kqwddff==',
    @Email = N'testadmin@xxx.com',
    @PasswordQuestion = N'secretQuestion',
    @PasswordAnswer = N'secretAnswer',
    @IsApproved = true,
    @CurrentTimeUtc = @nowUtc,
    @CreateDate = @now,
    @UniqueEmail = 1,
    @PasswordFormat = 1,
    @UserId = @MembershipId_OrgAdmin OUTPUT

    PRINT 'Test Admin Created successfully.' 

    -- Assign role to user
    EXEC  [aspnet_UsersInRoles_AddUsersToRoles]
        @ApplicationName  = N'XXX',
        @UserNames        = N'testadmin@xxx.com',
        @RoleNames       = N'ADMIN',
        @CurrentTimeUtc   =  @nowUtc


    PRINT 'Test Admin assigned to ADMIN Role successfully.' 

    -- Finally create a application user and connect it to membership user

INSERT INTO OrganizationUser
(MembershipId,IsDeleted,FirstName,LastName,PhoneNumber,Extension,Address1,Address2,City,State,ZipCode,Country,JobTitle,IsActive,OrganizationId,IsPasswordReset,DownloadCode,IsContactPerson,LastLoginDate,WelcomeEmailDate,CreatedDate,CreatedBy,UpdatedDate,UpdatedBy)
VALUES
(@MembershipId_OrgAdmin,0,'XXX','Admin','2888262','800','ABC','Charlotte, SC 21270','SC','SC','21270','US','XXX Admin',1,(select OrganizationId from Organization where  Name='XXX'),0,'1-1-14110985',1,null,null,@now,null,@now,null)

问题:

  1. Identity 中是否存在这些存储过程?
  2. 有哪些可能/建议的方法来处理这种情况,即使用身份将会员用户与应用程序用户联系起来?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity asp.net-identity-2


    【解决方案1】:

    有许多从会员资格转移到身份的例子。看看here。我不得不自己为几个项目这样做,并最终编写了一些代码,这些代码将用户从成员表中获取到他们的角色,迭代并在身份表中创建新的 ApplicationUsers,根据我的需要进行自定义。由于您可以向 ApplicationUser 添加属性(这在 Membership 中很棘手),因此您可以编写一些代码来获取您需要的成员资格(姓名、用户名、电子邮件等)、操作和创建用户。存储在会员中的密码确实存在一些问题,因为在身份中它们是经过哈希处理的,在会员中您可以选择纯文本、加密或哈希。

    至于你的问题:

    1. 身份没有存储过程或视图。所有查询都是通过 EntityFramework 生成的。
    2. 根据您的旧成员创建新的 ApplicationUser,并在完成后删除成员(表、视图、SP、提供程序)。我相信将会员用户与身份“链接”会在此过程中造成很多麻烦。所有身份验证和管理的东西都将由 Identity 及其 UserManger、SigninManager、RolesManager 等处理,您不需要 Membership 来纠结。

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多