Хэшированный пароль с базой данных EF 4.1 / ASP.NET MVC 3 - PullRequest
0 голосов
/ 25 июля 2011

Я запускаю свою собственную систему аутентификации и столкнулся с ситуацией, по которой мне нужно руководство.

Я , а не , сначала использую код EF 4.1.Я разработал базу данных для включения таблицы User со столбцами Id, Email и HashedPassword.Затем я позволил EF создать объект на основе этой таблицы.Затем я создал частичный класс для обработки своей проверки.

Проблема в том, что, на мой взгляд, я хочу иметь текстовое поле для электронной почты, пароля и подтверждения пароля.Мне нужна проверка пароля и подтверждение пароля (обязательно и сравните).Я могу добавить их в созданный мной класс проверки, но поскольку они не являются частью EF-объекта, созданного для таблицы User, я получаю ошибки компилятора при попытке просмотреть страницу.

Мой частичный класс

[MetadataType(typeof (UserMetadata))]
    public partial class User
    {
        private class UserMetadata
        {
            [Required]
            public string Email { get; set; }

            [Required]
            public string Password { get; set; }

            [Required]
            [Compare("Password")]
            public string ConfirmPassword { get; set; }
        }
    }

Мой взгляд

<h1>Sign Up</h1>
@using (Html.BeginForm("Create", "Users", FormMethod.Post))
{
    @Html.ValidationSummary()
    <p>
        @Html.LabelFor(x => x.Email)<br />
        @Html.TextBoxFor(x => x.Email)
    </p>
     <p>
        @Html.LabelFor(x => x.Password)<br />
        @Html.TextBoxFor(x => x.Password)
    </p>
    <p>
        @Html.LabelFor(x => x.ConfirmPassword)<br />
        @Html.TextBoxFor(x => x.ConfirmPassword)
    </p>

    <p class="button">
        <input type="submit" value="Submit" /></p>
}

Моя модель

Имя таблицы: Столбцы пользователей: Id, Email, HashedPassword

Как мне обойти это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Самый простой ответ, по-видимому, заключается в создании ViewModel, имеющей поля Password и ConfirmPassword для детали MVC.Когда вы на самом деле готовы сохранить в базу данных, используйте ее для создания версии модели EF с HashedPassword.

Тем не менее, я использовал свойства, которые не существуют в модели EF вмои представления без ViewModel, добавив их с частичным классом, как вы пытаетесь.Я думаю, проблема в том, что они есть внутри класса метаданных, когда они на самом деле не являются метаданными.Попробуйте вместо этого:

[MetadataType(typeof (UserMetadata))]
public partial class User
{
    [Required]
    public string Password { get; set; }

    [Required]
    [Compare("Password")]
    public string ConfirmPassword { get; set; }

    private class UserMetadata
    {
        [Required]
        public string Email { get; set; }


    }
}

Эта версия определяет пару новых свойств, а затем изменяет метаданные в Email для добавления [Required].

1 голос
/ 26 июля 2011

Модель вашего представления - это сама сущность User, которая не определяет свойство ConfirmPassword.Я бы порекомендовал вам создать совершенно новый класс модели представления, чем вы можете использовать AutoMapper для простого отображения между этими двумя классами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...