Скрипт для создания ASP.NET членства провайдера пользователя - PullRequest
7 голосов
/ 10 февраля 2012

Я создал несколько сценариев вставки для добавления нового пользователя в таблицу aspnet_Membership и aspnet_User.Я не могу авторизоваться, говорит, что не может найти моего пользователя.

Кто-нибудь пытался создать нового пользователя членства через вставки T-SQL?Я должен сделать это таким образом, потому что наш пользовательский код создания в C # / ASP.NET не работает в данный момент.

Ответы [ 3 ]

14 голосов
/ 09 октября 2013

Из MSDN:

declare @now datetime
set @now= GETDATE()
exec aspnet_Membership_CreateUser 'MyAppName','admin1','pass@word1', '','admin1@contoso.com','','',1,@now,@now,0,0,null

http://msdn.microsoft.com/en-us/library/gg252020(v=office.14).aspx

2 голосов
/ 29 апреля 2013

Попробуйте следующие сценарии:

Шаг 1. Определяемая пользователем функция для кодирования пароля и соли

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

Шаг 2. Хранимая процедура для создания пользователя user

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 @UserId=@pUserId

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

Шаг 3. Создайте пользователя

DECLARE @UserId uniqueidentifier

SET @UserId = NewId()

EXECUTE [dbo].[CreateUser] 
           'UserName'   --@UserName
          ,'UserP@ssword '--@ClearTextPassword
          ,'user@email.com '--@Email
          ,@UserId --User's uniqueidentifier

Дополнительные примечания:

  1. Проверьте правильность имени вашего приложения в элементе членства web.config.
  2. Не забудьте создать роли и добавить пользователя в роли.
2 голосов
/ 10 февраля 2012

Скорее всего, потому что провайдер членства хэширует пароль (и солитирует его) для сохранения и извлечения (сравнивается хеш, а не хэшированный пароль).

Полагаю, вы запустили хранимую процедуру aspnet_Membership_CreateUser. Это собирается поставить не хэшированный пароль (и неправильную соль).

Другими словами, вам нужно будет использовать провайдера / API-членство для создания, получения и аутентификации.

...