Как создать пользователей в таблице членства ASP.NET без использования CreateUser - PullRequest
9 голосов
/ 02 июня 2010

Я хочу перенести пользователей и сообщения из существующего форума, который я использую, в таблицу членства ASP.NET без использования CreateUser. По сути, я хочу сохранить идентификаторы пользователей, чтобы при переносе сообщений они продолжали ассоциироваться с правильными пользователями. Есть ли способ сделать это, или мне было бы лучше просто использовать CreateUser, а затем найти способ переназначить идентификаторы пост-пользователя для правильных новых идентификаторов?

Спасибо

Ответы [ 2 ]

11 голосов
/ 02 июня 2010

Вы можете создать таблицу UserProfile, которую можно использовать для присоединения из таблицы User к вашей таблице Post. Это защитит вас от внутренних проблем поставщика членства ASP.NET и может стать точкой расширения для дополнительной информации о пользователе.

Вот хранимая процедура и связанные с ней функции, которые я использую для создания новых пользователей и их профилей:

CREATE PROCEDURE [dbo].[CreateUser] 
  @UserName nvarchar(256)
, @ClearTextPassword nvarchar(128)
, @Email nvarchar(256)
, @PostingID uniqueidentifier

AS

BEGIN

DECLARE @ApplicationName nvarchar(256)
DECLARE @PasswordFormat int
DECLARE @UnencodedSalt uniqueidentifier
DECLARE @Password nvarchar(128)
DECLARE @PasswordSalt nvarchar(128)
DECLARE @Now DATETIME
DECLARE @UniqueEmail int

SET @ApplicationName = 'YOUR_APPLICATION_NAME'
SET @PasswordFormat = 1 
SET @UnencodedSalt = NEWID()
SET @PasswordSalt = dbo.base64_encode(@UnencodedSalt)
SET @Password = dbo.base64_encode(HASHBYTES('SHA1', 
   CAST(@UnencodedSalt as varbinary(MAX)) 
   + CAST(@ClearTextPassword AS varbinary(MAX)) )) 
SET @Now = getutcdate()
SET @UniqueEmail = 1


BEGIN TRANSACTION

DECLARE @UserId uniqueidentifier

EXECUTE [dbo].[aspnet_Membership_CreateUser] 
   @ApplicationName
  ,@UserName
  ,@Password
  ,@PasswordSalt
  ,@Email
  ,NULL
  ,NULL
  ,1
  ,@Now
  ,@Now
  ,@UniqueEmail
  ,@PasswordFormat
  ,@UserId OUTPUT

INSERT INTO [dbo].[UserProfile]
(
 [UserID]
,[PostingID]
)
VALUES
(
 @UserId
,@PostingID
)

COMMIT  

CREATE FUNCTION [dbo].[base64_decode] 
(@base64_text VARCHAR(max)) 
RETURNS VARBINARY(max)

WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT

BEGIN

DECLARE @x XML; SET @x = @base64_text 
RETURN @x.value('(/)[1]', 'VARBINARY(max)')

END

CREATE FUNCTION [dbo].[base64_encode] 
(@data VARBINARY(max)) 
RETURNS VARCHAR(max)

WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT

BEGIN

RETURN (

SELECT [text()] = @data 
FOR XML PATH('')

) 
END
0 голосов
/ 02 июня 2010

Что бы я сделал, я бы создал таблицу ссылок между таблицей вашего пользователя и таблицей членства ASP, где идентификатор членства (адрес электронной почты?) Будет связан с UserID (целое число?) Затем я создал бы подпрограмму для создания пользователей и заполнения таблицы членства данными пользователей программным способом - это немного проще сделать с помощью кода .NET.

...