2011-09-23 3 views
9

im en utilisant mvc formulaire pour donner à l'utilisateur la possibilité de modifier ses données dans la base de données. Tout va bien sauf mot de passe. Lorsque je reçois la valeur Mot de passe du contrôleur de base de données, je la passe en vue, mais la vue ne l'affiche pas. Je peux enregistrer le mot de passe mais il ne sera jamais affiché à l'intérieur de l'écran. De toute façon si je change PasswordFor à TextBoxFor cela fonctionne bien, mais je peux voir le mot de passe :(Asp.Net mot de passe MVC pour

Dans l'application intérieure, je donne à l'utilisateur la possibilité de configurer une autre fonction, vous pouvez configurer votre compte de messagerie externe. Si je soumets le formulaire, alors la base de données enregistrera le mot de passe vide - je ne veux pas enregistrer la valeur null dans la colonne du mot de passe, si l'utilisateur ne veut pas changer le mot de passe, il doit être le même

+1

C'est par conception (restrictions de sécurité). –

+0

cochez [this] (http://stackoverflow.com/a/30724210/2218697) si ** mot de passe réinitialise à vide ** – stom

Répondre

0

Habituellement, vous ne montrez jamais un mot de passe, vous en enregistrez un nouveau et si vous l'oubliez, vous envoyez un lien pour en créer un nouveau, mais en aucun cas l'ancien n'est pas en texte clair et non avec des points ...

4

Voici comment cela doit fonctionner. Les champs de mot de passe ne doivent jamais afficher de données.

Si vous utilisez correctement les mots de passe, vous ne pourrez même pas l'afficher. Vous devez effectuer un cryptage unidirectionnel (appelé hachage) des données et ne stocker que la valeur hachée dans la base de données. De cette façon, il ne peut jamais être déchiffré. Lorsqu'un utilisateur se connecte, il vous suffit de hacher le mot de passe qu'il a saisi et de le comparer à celui qu'il a enregistré.

4

Ok, c'est un oldie mais puisque je devais juste faire la même chose pour les paramètres d'email. solution simple, ajouter htmlAttributes comme ceci:

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

Cela définira la valeur de mot de passe dans l'entrée de mot de passe.

Le gars demande une réponse, pas les critiques. Ce n'est pas une question de «faire correctement les mots de passe», ce qu'il essaie d'accomplir nécessite d'enregistrer un mot de passe clair, afin qu'il puisse être envoyé à un serveur de messagerie ou autre système où envoyer une valeur hachée échouerait.

4

Le mot de passe se passa ainsi:

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

peut être vu dans le code source de la page de tout navigateur U_U

3

approche normale pour le changement de mot de passe par l'utilisateur est de fournir 3 vide champs MOT dE pASSE (type d'entrée = mot de passe):

  1. Nouveau mot de passe
  2. confir m nouveau mot de passe
  3. ancien mot de passe

Après l'utilisateur envoie des données sur le serveur, 1er vous vérifier si ancien mot de passe est correct (puisque vous ne voulez pas que quelqu'un d'autre pour changer le mot de passe si l'utilisateur oublie de se déconnecter), puis vérifier si l'utilisateur a tapé le nouveau mot de passe et l'a confirmé correctement (puisque les caractères sont masqués dans les champs de mot de passe, et seulement alors vous mettez à jour la base de données.

Vous devriez NE JAMAIS rendre le mot de passe de l'utilisateur en html.Cela s'applique également aux cas où la validation côté serveur échoue (longueur ou complexité du mot de passe). Vous restaurez toujours champs de mot de passe vide.

+0

Lien utile: [Comment comparer mot de passe et confirmer le mot de passe] (http: // aspdotnet-kishore .blogspot.de/2013/10/comment-je-compare-mot de passe-et-confirmer.html). – dee

0

Une autre option ici, si vous utilisez la syntaxe Razor, est d'utiliser JQuery pour remplir le champ du mot de passe. Quelque chose comme ce qui suit fonctionnera:

$(document).ready(function() { 
    $('#Password').val('@Model.Password'); 
}); 
9

je faisais face à même question et problème glissai par solution ci-dessous, peut-il vous aidera

Votre classe modèle

public class yourmodel 

{ 

    [DataType(DataType.Password)] 

    public string Password {get;set; } 

} 

Voir page

@Html.EditorFor(model => model.Password) 
Questions connexes