Orchard Custom MembershipService и UserService - PullRequest
1 голос
/ 12 июля 2011

Я создаю новый модуль для аутентификации пользователей на основе пользовательского MembershipService. Я сделал копии MembershipService и UserService из модуля Orchard.Users и добавил атрибут OrchardSuppressDependency к каждому из них. Я также создал пользовательский сервис доступа к данным и внедрил его в каждый. Мой первый шаг - заменить метод ValidateUser.

Существующий метод использует запрос ContentManager для извлечения UserPart из базы данных Orchard.

public IUser ValidateUser(string userNameOrEmail, string password)
    {
        var lowerName = userNameOrEmail == null ? "" : userNameOrEmail.ToLowerInvariant();

        var user = _orchardServices.ContentManager.Query<UserPart, UserPartRecord>().Where(u => u.NormalizedUserName == lowerName).List().FirstOrDefault();

        if (user == null)
            user = _orchardServices.ContentManager.Query<UserPart, UserPartRecord>().Where(u => u.Email == lowerName).List().FirstOrDefault();

        if (user == null || ValidatePassword(user.As<UserPart>().Record, password) == false)
            return null;

        if (user.EmailStatus != UserStatus.Approved)
            return null;

        if (user.RegistrationStatus != UserStatus.Approved)
            return null;

        return user;
    }

Мне нужно создать UserPart с данными из моего собственного хранилища. Я попытался выполнить следующее, и не было выдано никаких исключений, но пользователь не вошел в систему.

public IUser ValidateUser(string userNameOrEmail, string password)
    {
        UserPart user = null;
        var userRecord = _userRepository.GetUserByEmail(userNameOrEmail);

        if (null != userRecord)
        {
            user = _orchardServices.ContentManager.New<UserPart>("User");
            user.Record.Email = userRecord.Email;
            user.Record.EmailChallengeToken = userRecord.EmailChallengeToken;
            user.Record.EmailStatus = userRecord.EmailStatus;
            user.Record.HashAlgorithm = userRecord.HashAlgorithm;
            user.Record.Id = userRecord.Id;
            user.Record.NormalizedUserName = userRecord.NormalizedUserName;
            user.Record.Password = userRecord.Password;
            user.Record.PasswordFormat = userRecord.PasswordFormat;
            user.Record.PasswordSalt = userRecord.PasswordSalt;
            user.Record.RegistrationStatus = userRecord.RegistrationStatus;
            user.Record.UserName = userRecord.UserName;
        }

        if (user == null || ValidatePassword(user.Record, password) == false)
            return null;

        if (user.EmailStatus != UserStatus.Approved)
            return null;

        if (user.RegistrationStatus != UserStatus.Approved)
            return null;

        return user;
    }

Есть ли способ заполнить UserPart без запроса ContentManager? Я также разместил на форуме Orchard здесь .

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Убедитесь, что метод GetAuthenticatedUser (), присутствующий в файле FormsAuthenticationService.cs, возвращает вашего пользователя ожидаемым образом.

0 голосов
/ 12 июля 2011

Я бы порекомендовал вам внимательно прочитать код для DefaultContentManager.Я не совсем понимаю, что вы пытаетесь сделать, но вам не нужно делать «как» для пользователя, поскольку это уже UserPart.

...