2010-06-02 10 views
9

Kullanıcıları ve varolan bir forumadan kullanmak istediğim foruma, CreateUser kullanmadan bir ASP.NET üyelik tablosuna geçmek istiyorum. Temel olarak, kullanıcı kimliklerini korumak istiyorum, böylece iletileri taşıdığımda doğru kullanıcılarla ilişkilendirmeye devam ettiler. Bunu yapmanın bir yolu var mı yoksa CreateUser'i kullanmanın ve sonrasında UserID'leri doğru yeni kimliğe yeniden atamanın bir yolunu bulmamın daha iyi olur mu?CreateUser kullanmadan ASP.NET üyelik tablosundaki kullanıcıları nasıl oluşturabilirim

Teşekkür

+2

Tüm Kullanıcılar tablosunu (ID'ler dahil) yedekleme ve geri yükleme hakkında ne dersiniz? – Marek

cevap

11

Size Mesaj masaya Kullanıcı tablosundan katılmak için kullanabilecekleri bir UserProfile tablo oluşturabilir. Bu, sizi ASP.NET Üyelik Sağlayıcısının içsellerinden yalıtacaktır ve ek kullanıcı bilgileri için bir uzantı noktası olabilir. Ben ne yapardım

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

aslında base64_decode işlevini burada kullanmıyorsunuz ama sanırım tahmin etmek güzel. – robbie

0

Ben senin kullanıcının masa ve ASP üyelik masanın üyelik arasında bir bağlantı tablosunu yaratacak: İşte

bir saklı yordam ve yeni kullanıcılar ve onların profillerini oluşturmak için kullanabileceğiniz ilişkili fonksiyonlar var Kimlik (e-posta adresi?), UserID (Tamsayı?) Ile ilgili olabilir. Ardından, kullanıcı verileri oluşturmak ve kullanıcı verileriyle program tablosunu doldurmak için bir rutin oluşturabilirim. Bu, .NET kodu ile biraz daha kolay.

İlgili konular