2012-02-09 35 views
7

Tôi đã tạo một loạt các tập lệnh chèn để thêm người dùng mới vào bảng aspnet_Membership và aspnet_User. Tôi không thể xác thực, nói rằng nó không thể tìm thấy người dùng của tôi.Kịch bản để tạo một nhà cung cấp thành viên ASP.NET Người dùng

Có ai đã cố gắng tạo người dùng thành viên mới qua chèn T-SQL không? Tôi phải làm theo cách này vì mã tạo người dùng của chúng tôi trong C#/ASP.NET không hoạt động vào lúc này.

Trả lời

2

Điều đó rất có thể do nhà cung cấp thành viên băm mật khẩu (và muối nó) để lưu và truy xuất (mã băm được so sánh, không phải mật khẩu chưa được bẻ khóa).

Tôi đoán bạn đã chạy thủ tục được lưu trữ aspnet_Membership_CreateUser. Điều đó sẽ đặt một mật khẩu chưa được rửa (và muối sai).

Nói cách khác, bạn cần phải sử dụng nhà cung cấp/API thành viên để tạo, truy xuất và xác thực.

+0

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

+1

"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

+0

@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. –

2

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:

  1. 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.
  2. Hãy nhớ tạo vai trò và thêm người dùng vào vai trò.
+0

nơi tôi nhận [aspnet_Membership_CreateUser] hoặc quản trị viên máy chủ sql của tôi có khóa tôi không ...? –

Các vấn đề liên quan