2010-04-02 30 views
3

我有一個C#asp.net應用程序使用默認的Sql MembershipProvider。我的web.config中有控制我如何使用此提供幾個設置:我可以在Asp.Net的MembershipProvider中配置ResetPassword嗎?

enablePasswordRetrieval="false" 
enablePasswordReset="true" 
requiresUniqueEmail="true" 
passwordFormat="Hashed" 
minRequiredPasswordLength="5" 

我遇到的問題是,當人們重置其密碼,似乎ResetPassword()方法返回一個密碼這比我想要的還要長,並且可能會令人迷惑的字符(l,1,i,I,0,O)。此外,我向我的用戶發送一封包含純文本消息和HTML郵件的郵件(我正在使用帶有AlternateViews的MailMessage)。如果密碼中包含不安全的HTML字符,則當電子郵件客戶端呈現HTML文本時,密碼可能會不同(例如%,&和<不完全是HTML安全的)。

我查看了屬於web.config中的「add」元素,但我沒有看到任何額外的配置屬性,只在ResetPassword()方法中包含某些字符並限制了密碼長度。

我可以配置ResetPassword()方法來限制密碼長度並限制它所選擇的字符集嗎?

現在我有一個解決辦法:我叫ResetPassword(),以確保所提供的答案是正確的,然後我用一個RandomPassword generator我下載了互聯網產生,我喜歡(不模糊字符的密碼,HTML安全,只有8個字符長),然後我調用ChangePassword()來更改用戶的密碼後,我已經重置它。

我的解決方法似乎很爛,我認爲最好將ResetPassword()配置爲執行我想要的操作。

謝謝〜!

ColoradoTechie

+0

你有很好的經驗,到目前爲止,與'RandomPassword generator'?我也在尋找這樣的事情,因爲我從來沒有找到配置'ResetPassword'的方法。 – Slauma 2010-04-02 17:34:59

+0

我個人喜歡它,但是我們還沒有完成我們的應用程序的構建,所以我不確定它是如何在生產中。現在我調用它兩次(newPassword = RandomPassword.Generate(7)+ RandomPassword.Generate(1);),因爲我希望我的新密碼以字符開頭和結尾(如果您閱讀註釋,代碼將始終生成以字符開頭的密碼)。我也喜歡我如何限制特殊字符。 – 2010-04-05 15:45:35

+0

需要注意的一點是:我不知道MembershipProvider是否會限制您經常更改密碼,因此如果您重置了人員的密碼並進行更改,您可能需要增加人員可以更改的次數他們的密碼。 – 2010-04-05 15:47:24

回答

2

我不相信你可以做任何事情,以 「配置」 的ResetPassword()調用。您可以編寫自己的提供程序來更改ResetPassword()的工作方式。

link介紹你似乎已經在做同樣的手段....

與你的工作圍繞/黑客可能會走最簡單的方式入住。 :-)

但是,如果您想了解更多關於如何創建自己的提供商的信息,請查看這些鏈接。

http://www.asp.net/learn/videos/video-189.aspx

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

http://www.devx.com/asp/Article/29256/0/page/3

http://www.15seconds.com/issue/050216.htm

2

使用GeneratePassword方法確保至少所創建的密碼滿足您的MinRequiredPasswordLengthMinRequiredNonAlphanumericCharacters設置。我做這樣的事情:

// aUser is of class MembershipUser 
string aTempPassword = aUser.ResetPassword(); 
string aNewPassword = Membership.GeneratePassword(
          Membership.MinRequiredPasswordLength, 
          Membership.MinRequiredNonAlphanumericCharacters); 
aUser.ChangePassword(aTempPassword, aNewPassword); 

嗯,這是你想要什麼,因爲你無法控制用於最終密碼的字符集只有50%。(其實這也是從我的角度來看,更重要的方面 - 尤其是如果你有需要10分鐘和3個支持電話的用戶成功地擊中了一個卷邊括號的組合鍵,並且不知道剪貼板是什麼ResetPassword可以讓你成爲最討厭的人之一。)

+0

我對這個50%的訣竅很好!也要做同樣的事!謝謝。 – sangam 2015-06-27 18:47:29

0

我知道這已經回答了,但是我想在我今天遇到這個問題後加上2美分。

SQLMembershipProvider類公開

public virtual string GeneratePassword() 

其通過ResetPassword調用。因此,您可以簡單地擴展SQLMembershipProvider類並實現您自己的版本GeneratePassword

注意,這樣做會要求你更新你的web.config使用新的成員提供一流的成員資格提供條目:

<membership> 
    <providers> 
    <add type="My.Namespace.MyCustomSqlMembershipProvider" ... />   
相關問題