2012-02-09 8 views
7

Creé un conjunto de scripts de inserción para agregar un nuevo usuario a la tabla aspnet_Membership y aspnet_User. No puedo autenticar, dice que no puede encontrar a mi usuario.Secuencia de comandos para crear un proveedor de membresía de ASP.NET Usuario

¿Alguien ha intentado crear un nuevo usuario de membresía a través de inserciones de T-SQL? Debo hacerlo de esta manera porque nuestro código de usuario de creación en C#/ASP.NET no funciona en este momento.

Respuesta

2

Eso es más probable porque el proveedor de membresía hash la contraseña (y la saltea) para guardar y recuperar (se compara el hash, no la contraseña sin hit).

Supongo que ejecutó el procedimiento almacenado aspnet_Membership_CreateUser. Eso va a poner una contraseña sin hit (y sal incorrecta).

En otras palabras, deberá usar el proveedor de membresía/API para crear, recuperar y autenticar.

+0

NO He copiado una contraseña y la sal existente de otro usuario mío y lo utilizó para este nuevo usuario, así como en la instrucción de inserción – PositiveGuy

+1

"Membresía proveedor/API "sí, eso es lo que está roto en el código, y no tengo tiempo para arreglarlo ahora mismo ... necesito crear un usuario ahora para una prueba/emergencia de mantenimiento – PositiveGuy

+0

@CoffeeAddict Ok, bueno solo haz esto. Cree una aplicación que tenga un archivo de configuración con un connectionString apuntando a su base de datos, una sección de proveedor de membresía usando esa cadena de conexión (y su otro nombre de aplicación), y roleManager con los mismos detalles. –

2

Pruebe los siguientes guiones:

Paso función definida por el usuario 1. para codificar la contraseña y la sal

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 

Paso 2. Procedimiento almacenado para crear usuario suscrito

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 

Paso 3. Crear el usuario

DECLARE @UserId uniqueidentifier 

SET @UserId = NewId() 

EXECUTE [dbo].[CreateUser] 
      'UserName' [email protected] 
      ,'[email protected] '[email protected] 
      ,'[email protected] '[email protected] 
      ,@UserId --User's uniqueidentifier 

Notas adicionales:

  1. verificar el nombre de la aplicación es correcto en el elemento de miembros web.config.
  2. Recuerde crear roles y agregar usuarios a roles.
+0

¿dónde obtengo [aspnet_Membership_CreateUser] o mi administrador de servidor sql me ha bloqueado ...? –

Cuestiones relacionadas