【问题标题】:How can I create users in a ASP.NET membership table without using CreateUser如何在不使用 CreateUser 的情况下在 ASP.NET 成员表中创建用户
【发布时间】:2010-06-02 14:42:39
【问题描述】:

我想在不使用 CreateUser 的情况下将用户和帖子从我正在使用的现有论坛迁移到 ASP.NET 成员资格表。基本上我想维护用户 ID,以便在我迁移帖子时它们继续与正确的用户关联。有没有办法做到这一点,或者我最好只使用 CreateUser 然后找到一种方法将 post-by-UserID 重新分配给正确的新 ID?

谢谢

【问题讨论】:

  • 如何备份和恢复整个用户表(包括 ID)?

标签: asp.net asp.net-membership


【解决方案1】:

您可以创建一个 UserProfile 表,您可以使用该表从 User 表连接到您的 Post 表。这将使您与 ASP.NET Membership Provider 的内部隔离,并且可以作为其他用户信息的扩展点。

这是我用来创建新用户及其个人资料的存储过程和相关函数:

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

【讨论】:

  • 你实际上并没有在这里使用你的 base64_decode 函数,但我猜很高兴。
【解决方案2】:

我要做的是在您的用户表和 ASP 成员表之间创建一个链接表,其中成员 ID(电子邮件地址?)将与 UserID(整数?)相关。然后,我将构建一个例程,以编程方式创建用户并使用用户数据填充成员资格表 - 通过 .NET 代码更容易完成。

【讨论】:

    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多