注册站点用户和发送电子邮件

时间:2013-03-23 07:05:01

标签: c# asp.net security web-applications passwords

为网站注册用户并发送包含用户名和密码的链接的最佳方式是什么?

管理员将通过输入用户名而非密码

来创建用户

需要生成密码并将其作为哈希文本存储在数据库中,并使用链接和用户名将其发送到用户的电子邮件。 (这里我不能将哈希文本反转回纯文本并发送到电子邮件中):(

我怎样才能做到这一点?我在数据库中以散列格式存储了一些随机文本。无论何时管理员创建新用户,我都不确定如何向用户发送电子邮件。

任何想法/文章或建议?

2 个答案:

答案 0 :(得分:2)

我个人不喜欢用纯文本发送密码。但是我可以理解为什么有时需要它。例如,管理员为用户创建帐户。

使用凭据发送初始电子邮件

当用户在网站上注册时。将电子邮件地址和随机生成的密码(散列)保存到数据库。成功执行INSERT后,使用原始随机生成的密码(而不是哈希密码)将电子邮件发送给用户。

如果电子邮件失败

如果电子邮件无法发送或联系收件人,或者他们将其删除,那么他们就会丢失密码。您的站点将需要一个忘记密码部分,用户可以在其中请求重置密码。执行此操作时,您的脚本将创建另一个随机生成的密码,将散列版本存储到数据库并将未散列的版本发送给用户。

将重置密码与主帐户详细信息分开是个好主意,以防它不是尝试重置密码的所有者。否则,当他们登录时,他们的已知密码将不再有效,因为重置密码会覆盖它。

登录时更改密码

在这两种情况下,都应该强制用户在登录时更改密码。

其他选项

如果您希望可以存储时间戳以及帐户凭据,以确定首次重置或登录的时间长短。如果使用电子邮件凭据的登录请求在该时间内,则允许他们访问。如果不是,那么您说抱歉凭据已过期并允许它们重新重置。

答案 1 :(得分:0)

您可以使用authentication进行管理员登录,并授权他创建新的登录信息。

您可以在此处获取有关authentication and authorizations的帮助>>

http://msdn.microsoft.com/en-IN/library/eeyk640h%28v=vs.100%29.aspx

http://www.codeproject.com/Articles/98950/ASP-NET-authentication-and-authorization

您只需使用此功能发送电子邮件>>

public int sendMail(string to,string cc,string bcc,string subject,string body)

{ 

    try 

        {  


       SmtpMail.SmtpServer="your_server_address"; 

       MailMessage msg = new MailMessage(); 

            msg.From = "your_email_id";

       msg.To = to; 

            msg.Cc = cc; 

            msg.Bcc = bcc; 

            msg.Subject = subject; 

            msg.Body = body; 

       SmtpMail.Send(msg); 

            return(1); 
        } 
        catch 
        { 
               return (0); 
        } 
}

在SendEmail按钮上单击>>

private void Button1_ServerClick(object sender, System.EventArgs e) 
{ 
    String to = “to_email_id”; 
    String cc = “cc_email_id”; 
    String bcc = “bcc_email_id”; 
    String subject = “your subject goes here”; 
    String body = “your body text goes here”; 

    int status = sendMail(to,cc,bcc,subject,body); 

    if(status == 1) 
        Response.Write("your mail has been sent successfully"); 
    else 
        Response.Write("sorry! your mail could not be sent”); 
}

希望它有所帮助。