Hãy thử các kịch bản sau đây:
Bước 1. User Defined Function để mã hóa mật khẩu và muối
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 GO
Bước 2. Thủ tục lưu trữ để tạo người dùng thành viên
CREATE PROCEDURE [dbo].[CreateUser]
@UserName nvarchar(256)
, @ClearTextPassword nvarchar(128)
, @Email nvarchar(256)
, @pUserId 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
DECLARE @UserId uniqueidentifier
SET @ApplicationName = 'ApplicationName' --Find in aspnet_Applications.ApplicationName
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
SET @[email protected]
BEGIN TRANSACTION
--DECLARE @UserId uniqueidentifier
EXECUTE [dbo].[aspnet_Membership_CreateUser]
@ApplicationName
,@UserName
,@Password
,@PasswordSalt
,@Email
,NULL
,NULL
,1 -- IsApproved == true
,@Now
,@Now
,@UniqueEmail
,@PasswordFormat
,@UserId OUTPUT
COMMIT
END
GO
Bước 3. Tạo người dùng
DECLARE @UserId uniqueidentifier
SET @UserId = NewId()
EXECUTE [dbo].[CreateUser]
'UserName' [email protected]
,'[email protected] '[email protected]
,'[email protected] '[email protected]
,@UserId --User's uniqueidentifier
Ghi chú bổ sung:
- Kiểm tra tên ứng dụng của bạn là chính xác trong phần tử thành viên web.config của bạn.
- Hãy nhớ tạo vai trò và thêm người dùng vào vai trò.
NO Tôi chỉ sao chép một mật khẩu hiện hành và muối từ người dùng khác của tôi và sử dụng nó cho người dùng mới này cũng như trong báo cáo kết quả chèn – PositiveGuy
"thành viên nhà cung cấp/API "yea well đó là những gì bị phá vỡ trong mã, và tôi không có thời gian để sửa chữa mà ngay bây giờ ... cần phải tạo một người dùng ngay bây giờ cho một trường hợp khẩn cấp bảo trì/kiểm tra – PositiveGuy
@CoffeeAddict Ok, cũng chỉ cần làm điều này. Tạo một ứng dụng có một tệp cấu hình với một connectionString trỏ đến cơ sở dữ liệu của bạn, một phần nhà cung cấp thành viên sử dụng chuỗi kết nối đó (và tên ứng dụng khác của bạn) và vai trò Trình quản lý vai trò có cùng các chi tiết. –