2010-06-02 6 views
9

Deseo migrar usuarios y publicaciones de un foro existente que estoy usando a una tabla de membresía ASP.NET sin usar CreateUser. Básicamente quiero mantener los ID de usuario para que cuando migre las publicaciones continúen asociándose con los usuarios correctos. ¿Hay alguna manera de hacer esto o me sería mejor simplemente usar CreateUser y luego encontrar una forma de volver a asignar los ID de post-usuario a los ID nuevos correctos?¿Cómo puedo crear usuarios en una tabla de membresía ASP.NET sin usar CreateUser?

Gracias

+2

¿qué hay de la copia de seguridad y restauración de toda la tabla Usuarios (incluidos los ID)? – Marek

Respuesta

11

Se puede crear una tabla PerfilUsuario que se puede utilizar para unirse a la mesa del usuario en el Cuadro de puestos. Esto lo aislará de las partes internas del Proveedor de Membresía ASP.NET y puede ser un punto de extensión para información adicional del usuario.

Aquí es un procedimiento almacenado y funciones asociadas que utilizo para crear nuevos usuarios y sus perfiles:

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

en realidad no usa su función base64_decode aquí, pero es agradable tenerlo, supongo. – robbie

0

Lo que yo haría es me gustaría crear una tabla de enlace entre la mesa de su usuario y la tabla de miembros ASP donde la afiliación ¿ID (dirección de correo electrónico?) Estaría relacionado con ID de usuario (¿Entero?). Luego, crearía una rutina para crear usuarios y llenar la tabla de membresía con los datos de los usuarios programáticamente; es un poco más fácil hacerlo a través del código .NET.

Cuestiones relacionadas