Membership.GeneratePassword

时间:2016-11-21 00:21:10

标签: asp.net-mvc-5 smtp

我需要在注册新教师时通过电子邮件向用户发送临时密码。 我使用Membership.GeneratePassword生成随机密码。 这是我的TeacherController

[HttpPost]
    public async Task<ActionResult> Create(TeacherViewModel viewModel)
    {
        if (!ModelState.IsValid)
        {
            var model = new TeacherViewModel()
            {
                Courses = _context.Courses.ToList(),
                SituationActuelles = _context.SituationActuelles.ToList()
            };

            return View("Create", model);
        }

        var teacher = new Teacher
        {               
            PhoneNumber = viewModel.PhoneNumber,
            Password = viewModel.Password
        };
        _context.Teachers.Add(teacher);
        _context.SaveChanges();

        var body = "<p>Merci de votre interet a NewEra Tutoring Corp.</p> <br/>" +
                   "Vos credentials pour acceder a votre platform est le suivant: <br/>" +
                   "Email: Votre email<br/>" +
                   "Votre mot de passe temporaire: " + viewModel.Password;
        var message = new MailMessage();
        message.To.Add(new MailAddress(viewModel.Email));  // replace with valid value 
        message.From = new MailAddress("recrutement@newera-tutoring.com");  // replace with valid value
        message.Subject = "Your email subject";
        message.Body = string.Format(body, "NewEra Tutoring", "recrutement@newera-tutoring.com", "Votre identifiant pour NewEra Tutoring");
        message.IsBodyHtml = true;

        using (var smtp = new SmtpClient())
        {
            var credential = new NetworkCredential
            {
                UserName = "recrutement@newera-tutoring.com",  // replace with valid value
                Password = "neweratutoring"  // replace with valid value
            };
            smtp.Credentials = credential;
            smtp.Host = "gator4123.hostgator.com";
            smtp.Port = 587;
            smtp.EnableSsl = true;
            await smtp.SendMailAsync(message);
        }
        return RedirectToAction("Index", "Home");
    }

但是我在电子邮件中收到的密码与它保存在数据库中的密码不同。

这是我的模特

TeacherViewModel{
    public string Password => Membership.GeneratePassword(12, 1);

}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您在视图模型中使用了一个表达身体成员的密码属性,它基本上围绕对会员密码的调用创建了一个get包装器。

每次访问该属性时,它会再次运行该函数时生成一个新密码。

我不明白你为什么要在视图模型中拥有它,除非你打算提供一个随机密码,用户可以用自己的密码替换。如果这是目标,则使用标准属性get / set,并在视图模型构造函数中创建初始密码值。否则,将其从视图模型&amp;中取出。只有在其他所有内容都有效的情况下才在后期操作中创建密码。