Пароль Asp.Net MVC для - PullRequest
       7

Пароль Asp.Net MVC для

10 голосов
/ 23 сентября 2011

я использую форму mvc, чтобы дать пользователю возможность изменять свои данные в базе данных.Все хорошо, кроме пароля.Когда я получаю значение пароля из контроллера базы данных, он передает его в представление, но представление не отображает его.

<div class="editor-field">
            <%: Html.PasswordFor(model => model.Password) %>
            <%: Html.ValidationMessageFor(model => model.Password) %>
</div>

Я могу сохранить пароль, но он никогда не отображается внутри окна.В любом случае, если я изменю PasswordFor на TextBox, он работает нормально, но я вижу пароль: (

Внутри приложения я даю пользователю возможность настроить некоторые другие функции, вы можете настроить свою внешнюю учетную запись электронной почты. При просмотре с помощью формыотображается поле с паролем пусто. Если я отправлю форму, база данных сохранит пустой пароль - я не хочу сохранять ноль в столбце пароля, если пользователь не хочет менять пароль, он должен быть таким же, как и раньше, также мне нужночтобы не показывать это пользователю.

Ответы [ 8 ]

9 голосов
/ 27 декабря 2013

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

Класс вашей модели

public class yourmodel

{

   [DataType(DataType.Password)]

  public string Password {get;set; }

}

Просмотреть страницу

 @Html.EditorFor(model => model.Password)
6 голосов
/ 23 сентября 2011

Вот как это должно работать. Поля пароля никогда не должны отображать данные.

Если вы правильно делаете пароли, вы даже не сможете их отобразить. Вы должны выполнять одностороннее шифрование (называемое хешем) данных и хранить только хешированное значение в базе данных. Таким образом, он никогда не может быть зашифрован. Когда пользователь входит в систему, вы просто хешируете введенный им пароль и сравниваете его с сохраненным.

4 голосов
/ 08 апреля 2013

Обычный подход для смены пароля пользователем заключается в предоставлении 3 пустых полей ПАРОЛЯ (тип ввода = пароль):

  1. Новый пароль
  2. Подтверждение нового пароля
  3. Старый пароль

После того, как пользователь отправляет данные на сервер, сначала вы проверяете, верен ли старый пароль (так как вы не хотите, чтобы кто-то другой изменил пароль, если пользователь забывает выйти из системы), затем проверьте, если пользователь ввел новый пароль и подтвердил его правильно (так как символы маскируются в полях паролей, и только тогда вы обновляете базу данных.

НИКОГДА не переводите пароль пользователя в html .Это также относится к случаям, когда проверка на стороне сервера не удалась (длина или сложность пароля). Вы всегда отображаете пустые поля пароля .

4 голосов
/ 01 декабря 2012

Пароль передается следующим образом:

<%: Html.ValidationMessageFor(model => model.Password, new { value=model.Password }) %>

можно увидеть в исходном коде страницы из любого браузера U_U

4 голосов
/ 23 февраля 2012

Хорошо, это старая, но мне просто нужно было сделать то же самое для настроек электронной почты. Простое решение, добавьте htmlAttributes так:

<div class="editor-field">
        <%: Html.PasswordFor(model => model.Password) %>
        <%: Html.ValidationMessageFor(model => model.Password, new { value=model.Password }) %>
</div>

Это установит значение пароля при вводе пароля.

Парень просит ответа, а не критиков. Это не вопрос «правильного выполнения паролей» или нет, то, что он пытается выполнить, требует сохранения чистого пароля, чтобы его можно было отправить на почтовый сервер или в другую систему, где отправка хешированного значения не удалась бы.

1 голос
/ 23 сентября 2011

В чем дело?Обычно вы никогда не показываете пароль.Вы сохраняете новый и, если забыли, отправляете ссылку для создания нового, но ни в коем случае не отображаете старый не открытым текстом и не с точками ...

0 голосов
/ 12 апреля 2019

Я согласен с некоторыми другими ответами: вы никогда не должны отображать пароль на странице .

Но если вам все равно, и вы хотите, чтобы все заработало, есть простой способ сделать это:

@Html.PasswordFor(m => m.Password, new { value = Model?.Password })

В любом случае, я не понимаю, почему некоторые другие пользователи предлагают поместить значение htmlAttribute в сообщение проверки вместо поля пароля. Очень странно, я даже не понимаю смысл этого.

0 голосов
/ 31 августа 2013

Другой вариант, если вы используете синтаксис Razor, это использовать JQuery для заполнения поля пароля.Будет работать что-то вроде следующего:

$(document).ready(function() {
    $('#Password').val('@Model.Password');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...