2016-01-20 58 views
1

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

我们被困在的问题是,存储过程例如“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'[email protected]', 
    @Password = N'QhoM803ew/sdfdf/4NQ=', 
    @PasswordSalt = N'dGzG1ddfdfdfk1Kqwddff==', 
    @Email = N'[email protected]', 
    @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'[email protected]', 
     @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. 做这些存储过程中的身份存在吗?
  2. 什么是可能的/建议的方式来处理这种情况,即链接成员资格用户与应用程序用户使用身份?

回答

2

从会员转移到身份有很多例子。看看here。我必须自己做几个项目,并最终编写一些代码,使用会员表中的用户及其角色,迭代并在Identity表中创建新的ApplicationUser,并根据需要自定义。既然您可以向ApplicationUser添加属性(成员资格中有些棘手),您可以编写一些代码,从成员资格(名称,用户名,电子邮件等)中获取所需的信息,操作和创建用户。存储在成员资格中的密码有问题,例如在身份验证中,他们被散列并且会员可以选择纯文本,加密或散列。

至于你的问题:

  1. 身份没有存储过程,也没有意见。所有查询都是通过EntityFramework生成的。
  2. 根据您的旧会员资格创建新的ApplicationUsers,并在完成后删除成员资格(表格,视图,SP,提供者)。我相信将会员用户“身份”连接到身份将会在此过程中造成很大的麻烦。所有的身份验证和管理工作都将由Identity和它的UserManger,SigninManager,RolesManager等来处理,而且你不需要Membership来纠结。
相关问题