2013-03-23 178 views
-1

爲網站註冊用戶併發送包含用戶名和密碼的鏈接的最佳方式是什麼?註冊網站用戶和發送電子郵件

管理員將創建通過輸入用戶名,但沒有密碼

密碼需要產生和數據庫中的哈希存儲的文本與鏈接和用戶名發送相同的用戶的電子郵件的用戶。 (在這裏我不能將哈希文本轉換回純文本併發送到電子郵件中:) :(

我該如何實現這一目標?我在數據庫中存儲了一些散列格式的隨機文本,不知道如何通過電子郵件發送給用戶只要管理員創建一個新用戶。

任何想法/文章或建議?

+0

您需要生成隨機密碼,將散列版本存儲到數據庫,確保INSERT成功。然後將原始未散列隨機密碼發送給用戶,同時您仍然知道它是什麼。 – diggersworld 2013-03-23 07:13:53

+0

@diggersworld聽起來不錯。當用戶登錄我需要強制他們設置一個新的密碼:) – Billa 2013-03-23 07:14:55

+0

@diggersworld,如果電子郵件發送失敗會發生什麼:(我如何再次發送電子郵件? – Billa 2013-03-23 07:16:05

回答

2

我個人不喜歡用純文本發送密碼。不過,我可以理解爲什麼有時需要。例如,管理員爲用戶創建帳戶。

發送帶有證書

當用戶與網站註冊的初始電子郵件。將電子郵件地址和隨機生成的密碼(散列)保存到數據庫。在成功插入後,用原始的隨機生成的密碼(而不是散列的)發送電子郵件給用戶。

如果電子郵件失敗

如果郵件無法發送或到達收件人,或者刪除它,然後他們已經失去了密碼。您的網站需要一個被遺忘的密碼部分,用戶可以請求重置。在執行此操作時,您的腳本將創建另一個隨機生成的密碼,將散列版本存儲到數據庫並將未加溼版本發送給用戶。

將重置密碼與主帳戶詳細信息分開以防萬一它不是所有者嘗試重置密碼是個好主意。否則,當他們來登錄他們已知的密碼將不再工作,因爲重置密碼會覆蓋它。在登錄

在這兩種情況下

更改密碼的用戶應該被迫在登錄時更改密碼。

其他選項

如果你想你可以存儲一個時間戳和帳戶憑據,因爲他們要多久恢復或登錄的第一次一起。如果使用通過電子郵件發送的憑證的登錄請求在該時間內,則允許他們訪問。如果不是那麼你說對不起憑據過期,並允許他們再次重置。

+0

這種技術真的很好:) – Billa 2013-03-23 07:41:23

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」); 
} 

希望它有幫助。

+0

哦,我的天啊,我不認爲你理解我的問題,我知道發送電子郵件和身份驗證,我想知道更好的方式,如使用nonce技術等 – Billa 2013-03-23 07:12:34