代码之家  ›  专栏  ›  技术社区  ›  SBirthare

使用ASP在SQL脚本中创建用户和角色。NET标识

  •  1
  • SBirthare  · 技术社区  · 9 年前

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

    我们遇到的问题是,存储过程(例如“aspnet_Membership_CreateUser”)在成员数据库(aspnetdb)中可用,但在我们创建的身份数据库中不可用。

    脚本如下所示:

        -- 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. 处理这种情况的可能/建议方法是什么,即使用身份将会员用户与应用程序用户链接起来?
    1 回复  |  直到 9 年前
        1
  •  2
  •   Issac    9 年前

    从会员身份转变为身份的例子有很多。看一看 here 。我不得不自己在几个项目中这样做,最后编写了一些代码,将用户从成员表中带到他们的角色中,迭代并在Identity表中创建新的ApplicationUsers,这些都是根据我的需要定制的。由于您可以将属性添加到ApplicationUser(这在Membership中很棘手),因此您可以编写一些代码,从成员身份(名称、用户名、电子邮件等)中获取所需内容,操作和创建Users。存储在成员身份中的密码确实存在一些问题,例如在身份中它们是散列的,在成员身份,您可以选择纯文本、加密或散列。

    关于您的问题:

    1. 标识既没有存储过程,也没有视图。所有查询都是通过EntityFramework生成的。
    2. 基于旧成员身份创建新的ApplicationUsers,并在完成后删除成员身份(表、视图、SP、提供程序)。我相信,将会员用户与身份“联系起来”会在这一过程中带来很多麻烦。所有的身份验证和管理工作都将由Identity及其UserManger、SigninManager、RolesManager等处理,您不需要成员身份来纠结。