Mot de passe oublié + Email de Confirmation de ASP.NET MVC WebMatrix

Il semble que ces deux caractéristiques ont un ensemble de fonctions d'assistance et de schéma dans le WebMatrix code à aller de l'avant. Cependant, il n'existe pas de méthodes de contrôleur ou de points de vue, de sorte que vous avez à mettre en œuvre vous-même.

Est-il des échantillons partout où je peux il suffit de copier ce code dans mon application? Je suis à la recherche de quelque chose à:

  • Générer Mot De Passe Oublié Courriel
  • Générer De L'E-Mail De Confirmation
  • Mot de passe oublié vue + Contrôleur méthode
  • Renvoyer l'email de confirmation de vue + Contrôleur méthode

OriginalL'auteur Doug | 2012-11-03

  1. @Html.LabelFor(m => m.EmailId)
    @Html.TextBoxFor(m => m.EmailId)
  2. @Html.LabelFor(m => m.De détails)
    @Html.TextBoxFor(m => m.De détails)
  3. L'étape 5
    • Maintenant, allez dans l'Explorateur de solutions...Contrôleurs de ... Compte Contrôleur de ... version Poste de Registre méthode d'action du contrôleur
    • Ajouter ces propriétés pour permettre aux utilisateurs d'entrer l'adresse e-mail et d'autres détails.Les modifications sont mises en évidence.

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            //Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { EmailId = model.EmailId, Details = model.Details});
    
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }
    
        //If we got this far, something failed, redisplay form
        return View(model);
    }

    Pourquoi n'avons-nous pas encore de construire et d'exécuter notre projet? Inscrivez-vous et remplissez les détails .Maintenant, il vous sera demandé de spécifier l'adresse email aussi .Ajouter ces propriétés pour permettre aux utilisateurs d'entrer l'adresse e-mail et d'autres détails.

    Aller à l'explorateur de serveurs, puis cliquez droit sur le Profil de l'Utilisateur le tableau et Sélectionnez “Afficher la Table de Données” U pouvez afficher les détails que vous avez entré pour vérification.

    L'étape 6
    • Maintenant passons à mettre en œuvre la fonctionnalité de réinitialisation de mot de passe  Aller en compte contrôleur et créez le contrôleur d'action de la méthode (GET )

    [AllowAnonymous]
    public ActionResult ForgotPassword()
    {
    return View();
    }
        (POST)
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult ForgotPassword(string UserName)
    {
    //check user existance
    var user = Membership.GetUser(UserName);
    if (user == null)
    {
    TempData["Message"] = "User Not exist.";
    }
    else
    {
    //generate password token
    var token = WebSecurity.GeneratePasswordResetToken(UserName);
    //create url with above token
    var resetLink = "<a href='" + Url.Action("ResetPassword", "Account", new { un = UserName, rt = token }, "http") + "'>Reset Password</a>";
    //get user emailid
    UsersContext db = new UsersContext();
    var emailid = (from i in db.UserProfiles
    where i.UserName == UserName
    select i.EmailId).FirstOrDefault();
    //send mail
    string subject = "Password Reset Token";
    string body = "<b>Please find the Password Reset Token</b><br/>" + resetLink; //edit it
    try
    {
    SendEMail(emailid, subject, body);
    TempData["Message"] = "Mail Sent.";
    }
    catch (Exception ex)
    {
    TempData["Message"] = "Error occured while sending email." + ex.Message;
    }
    //only for testing
    TempData["Message"] = resetLink;
    }
    return View();
    }

    • L'OBTENIR d'action du contrôleur retourne juste la vue.
    • Le POSTE de contrôleur de l'action :
    Reçoit le nom d'utilisateur
    Vérifie son existence
    Génère de réinitialisation de Mot de passe
    Construit URL pour être envoyé par courriel.

    L'étape 7
    • Clic droit sur le mot de passe oublié méthode d'action et d'ajouter de vue  Le code pour la page d'affichage sera comme ci-dessous

    @{
    ViewBag.Title = "Forgot Password";
    }
    <h2>Forgot Password</h2>
    @using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    <fieldset>
    <legend>Forgot Password Form</legend>
    <ol>
    <li>
    @Html.Label("User Name", new { @for = "UserName" })
    @Html.TextBox("UserName")
    <span style="color:red;">@TempData["Message"]</span>
    </li>
    </ol>
    <input type="submit" value="Recover" />
    </fieldset>
    }

    • Le point de vue page d'affichage d'une zone de texte où l'utilisateur peut entrer le nom d'utilisateur.

    L'étape 8
    • Maintenant, allez dans l'Explorateur de solutions... ... des Modèles de Compte modèle ... Profil de l'Utilisateur Modèle de Vue. Des modifications ont été mis en évidence

    [Table("UserProfile")]
    public class UserProfile
    {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    //new properties
    public string EmailId { get; set; }
    public string Details { get; set; }
    }

    L'étape 9
    • Maintenant, allez dans l'Explorateur de solutions... ... Compte ... de Connexion View.
    Maintenant, nous pouvons voir une option pour récupérer son mot de passe au cas où il aurait oublié.

    <ul>    
    <li>
    @Html.ActionLink("Register", "Register") if you don't have an account.
    </li>
    <li>
    @Html.ActionLink("Forgot Password", "ForgotPassword") if you want to recover your password.
    </li>
    </ul>

    Partie 2
    La réception de Réinitialisation de Mot de passe de l'Information à partir de l'URL

    L'étape 1
    • Aller dans l'Explorateur de solutions Contrôleur... ... le Compte de Contrôleur ...
    Créer de nouveaux Réinitialiser le Mot de passe de la Méthode d'Action
    • Cette méthode est d'accepter " un "(qui est le nom d'utilisateur) et " rt " (qui est réinitialisation de mot de passe) à partir de l'URL.

    [AllowAnonymous]
    public ActionResult ResetPassword(string un, string rt)
    {
    UsersContext db = new UsersContext();
    //TODO: Check the un and rt matching and then perform following
    //get userid of received username
    var userid = (from i in db.UserProfiles
    where i.UserName == un
    select i.UserId).FirstOrDefault();
    //check userid and token matches
    bool any = (from j in db.webpages_Memberships
    where (j.UserId == userid)
    && (j.PasswordVerificationToken == rt)
    //&& (j.PasswordVerificationTokenExpirationDate < DateTime.Now)
    select j).Any();
    if (any == true)
    {
    //generate random password
    string newpassword = GenerateRandomPassword(6);
    //reset password
    bool response = WebSecurity.ResetPassword(rt, newpassword);
    if (response == true)
    {
    //get user emailid to send password
    var emailid = (from i in db.UserProfiles
    where i.UserName == un
    select i.EmailId).FirstOrDefault();
    //send email
    string subject = "New Password";
    string body = "<b>Please find the New Password</b><br/>" + newpassword; //edit it
    try
    {
    SendEMail(emailid, subject, body);
    TempData["Message"] = "Mail Sent.";
    }
    catch (Exception ex)
    {
    TempData["Message"] = "Error occured while sending email." + ex.Message;
    }
    //display message
    TempData["Message"] = "Success! Check email we sent. Your New Password Is " + newpassword;
    }
    else
    {
    TempData["Message"] = "Hey, avoid random request on this page.";
    }
    }
    else
    {
    TempData["Message"] = "Username and token not maching.";
    }           
    return View();
    }

    L'étape 2
    • Clic droit sur le réinitialiser le mot de passe de la méthode d'action et d'ajouter de vue  Le code pour la page d'affichage sera comme ci-dessous

    @{
    ViewBag.Title = "ResetPassword";
    }
    <h2>Password Mailed :) </h2>

    L'étape 3
    • Aller dans l'Explorateur de solutions...... des Modèles de Compte de Modèles ...
    Apportez les modifications suivantes.
    • Nous créons une instance de UserProfile DB Modèle et de mettre en œuvre db.webpages_Memberships " comme DbSet.L'utilisation de ‘webpages_Memberships " comme un modèle.

    public class UsersContext : DbContext
    {
    public UsersContext()
    : base("DefaultConnection")
    {
    }
    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<webpages_Membership> webpages_Memberships { get; set; }
    }
    [Table("webpages_Membership")]
    public class webpages_Membership
    {
    [Key]
    public int UserId { get; set; }
    public DateTime CreateDate { get; set; }
    public string ConfirmationToken { get; set; }
    public bool IsConfirmed { get; set; }
    public DateTime LastPasswordFailureDate { get; set; }
    public int PasswordFailuresSinceLastSuccess { get; set; }
    public string Password { get; set; }
    public DateTime PasswordChangeDate { get; set; }
    public string PasswordSalt { get; set; }
    public string PasswordVerificationToken { get; set; }
    public DateTime PasswordVerificationTokenExpirationDate { get; set; }
    }

    L'étape 4
    • Ajout de la Fonction de Génération de Mot de passe Aléatoire pour le compte du contrôleur
    • Cette méthode lorsqu'elle est appelée va générer un mot de passe aléatoire pour l'utilisateur

     private string GenerateRandomPassword(int length)
    {
    string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-*&#+";
    char[] chars = new char[length];
    Random rd = new Random();
    for (int i = 0; i < length; i++)
    {
    chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
    }
    return new string(chars);
    }

    L'étape 5
    • Ajouter les Envoyer par Courriel de la Fonction en compte contrôleur.
    • Cette fonction va envoyer le premier mail à l'utilisateur lorsque l'utilisateur clique sur le bouton récupérer sur mot de passe oublié forme de. Le premier e-mail contenant le lien de réinitialisation du mot de passe. Lorsque l'utilisateur clique sur le lien. L'utilisateur sera redirigé vers la réinitialisation du mot de passe de la page. De nouveau le nouveau mot de passe sera envoyé à l'utilisateur.
    • Vous avez besoin de mettre votre adresse mail dans le lieu de [email protected] et d'écrire votre mot de passe.

    private void SendEMail(string emailid, string subject, string body)
    {
    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.Host = "smtp.gmail.com";
    client.Port = 587;  
    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("[email protected]", "password");
    client.UseDefaultCredentials = false;
    client.Credentials = credentials;
    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
    msg.From = new MailAddress("[email protected]");
    msg.To.Add(new MailAddress(emailid));
    msg.Subject = subject;
    msg.IsBodyHtml = true;
    msg.Body = body;
    client.Send(msg);
    }
    +1 pour la longueur de cisaillement de votre réponse.

    OriginalL'auteur Palak Sanghani