0

Я реализую SimpleMembershipProvider в небольшом проекте MVC4, и я уже могу инициализировать соединение с базой данных с помощью предоставленной клиентом базы данных с уже указанными пользовательскими и ролевыми таблицами (которые называются sp_person и sp_role).Задание поля пароля для SimpleMembershipProvider

Проблема заключается в том, что когда я пытаюсь войти в систему, приложение MVC отклоняет мой пароль с типичным сообщением об ошибке «неправильный пароль», хотя я уже знаю, что это правильный пароль. Я подозреваю, что проблема в том, что SimpleMembershipProvider не знает, где хранить пароль (он находится в таблице sp_person, в поле «ecampus_password»), и поэтому аутентификация завершается с ошибкой.

Как я могу сказать SimpleMembershipProvider, где искать сохраненный пароль?

Спасибо заранее,

Лестер
+0

SimpleMembership поставляется с набором таблиц по умолчанию, вы изменили их? –

+0

Я ничего не изменил, я должен? Google ничего мне не дает. –

+0

Насколько я знаю, SimpleMembership работает с несколькими таблицами, но основными из них являются UserProfile (вы можете редактировать этот, по умолчанию он имеет UserId и userName) и _Membership (у него есть UserId и вся информация, связанная с входом пользователя). Возможно, что происходит, что ваша функция входа в систему идет против _Membership, скорее того, который, по вашему мнению, должен идти. Я предлагаю использовать эту таблицу _Membership для хранения паролей и информации, связанной с подключением. Дайте мне знать –

ответ

1

Nevermind, я обнаружил, что SimpleMembershipProvider не является решением проблемы. В этом случае я должен реализовать пользовательский поставщик.

Шагов следующим образом:

  • Добавить модель данных Entity в проект, который потребляет только таблицы, относящиеся к схеме Идента (в моем случае, импортируя только sp_person и sp_role).
  • Добавить System.Web.ApplicationServices в качестве ссылки на проект.
  • Добавить новый класс в проект, указать на System.Web.Security в операторе using и сделать наследование класса от MembershipProvider. MembershipProvider - это абстрактный класс, поэтому реализуйте его, когда его спросят.
  • Добавить объект в класс типа Entity Framework, созданный для вас при добавлении модели данных (обычно это называется <CONNECTION_NAME>Entities, это можно изменить при создании модели). Что-то вроде этого:

    public class MyMembershipProvider : MembershipProvider 
    { 
        private MYCONNECTIONEntities db = new MYCONNECTIONEntities(); 
    } 
    
  • Строго говоря, вы, возможно, придется реализовать все свойства и методы в классе, но и для AUTH, вы должны реализовать ValidateUser(). Простое использование запроса LINQ для извлечения пользователя из вашей модели данных. Вот мой:

    var list = from u in db.st_person 
          where u.ecampus_login == username 
          && u.person_password == password 
          select u; 
    return list.Count() > 0; 
    
  • В web.config под <authentication> элемента, добавьте новый поставщик, как это:

    <membership defaultProvider="MyMembershipProvider"> 
        <providers> 
        <clear /> 
        <add name="MyMembershipProvider" type="PROJECT_NAME.MyMembershipProvider"/> 
        </providers> 
    </membership> 
    
  • Compile и испытание.

Смежные вопросы