Създаване на потребители и роли в SQL Script с ASP.NET Identity

+5 гласа
212 прегледа
попитан 2016 май 16 от Nikoleta.V. (4,090 точки)

Използвахме Membership досега,а сега в новия проект използваме Identity за автентификация и авторизация. Можем да създаваме потребители и роли по програмен път(в Seed метода на Identity проекта). Трябва и да свържем тези потребители с потребителите в приложението, например Employee, докато създаваме потребители в Seed метода на DA слоя на приложението. За това по-рано използвахме  SQL Script. Сега по този начин трябва да създадем Identity потребители и роли. От SQL Script можем да вземем MembershipId на потребителя и да ползваме тази стойност, за да я сложим в колоната Employee's 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? 
  1. Как предлагате да реша проблема със свързването на membership потребителите и потребителите в приложението чрез Identity? 

1 отговор

0 гласа
отговорени 2016 май 16 от valeri.hristov (7,340 точки)

Има много примери за преминаване от membership към Identity. Погледни тук:

http://www.asp.net/identity/overview/migrations/migrating-an-existing-website-from-sql-membership-to-aspnet-identity

Наложи ми се да го правя за няколко проекта и накрая написах код, който взима потребителите с техните роли от membership таблиците, обхожда ги и създава нови ApplicationUser-и в Identity таблиците. Тъй като можеш да добавиш пропъртита на ApplicationUser, може да си напишеш код, който да взима каквото е нужно от membership(име,потребителско име,имейл и тн), обработва го и създава User-ите. Имах малко проблеми с паролите, тъй като в membership могат да са в чист вид, криптирани или хеширани, а в Identity може само хеширани.

Относно въпросите ти:

  1. Identity няма сторнати процедури или view-та. Всички заявки се генерират през Entity Framework.
  2. Създай нови ApplicationUser-и, базирани на стария membership, и го изтрии(таблици,view-та, SP, provider-и) след като си готов. Мисля, че „свързването“ на membership потребителите към identity ще създава доста проблеми. Автентификацията и оправянето на нещата ще се прави от Identity и неговите UserManger, SigninManager, RolesManager и тн., така че не ти трябва да се връзваш за Membership.
...