2010-08-02 41 views
4

我正在使用ASP .NET成員資格數據庫對Web應用程序中的用戶進行身份驗證。Membership.FindUsersByEmail - SQL通配符

用戶使用他們的電子郵件地址登錄,但在數據庫的用戶名字段中使用了其他內容。

所以登錄屏幕上,我使用Membership.FindUsersByEmail

的問題是,這個函數使用取我的用戶在SQL和SQL通配符不在於方法逃過「LIKE」。

因此,例如使用[email protected]的方法將返回[email protected][email protected]的用戶名(因爲下劃線被視爲通配符)。

根據wiki,在電子郵件地址中接受引號,%和一堆其他字符。

雖然我可以打電話Membership.FindUsersByEmail之前做這樣的事情

emailAddr = emailAddr.Replace("_", "[_]").Replace("%", "[%]")... 

,我在想,必須有這樣做一個更清潔的方式。

+0

你爲什麼使用LIKE語句?你的用戶不知道他們是如何輸入自己的電子郵件地址的?我從來沒有意外去過GMAIL,只輸入「[email protected]」。 (或者更確切地說:。[obfuscated] @ gmail.co)。 – AllenG 2010-08-02 18:14:52

+0

我不是使用類似聲明的人。 System.Web.Security.Membership.FindUsersByEmail是。看到這裏http://msdn.microsoft.com/en-us/library/b2ec0bts.aspx – 2010-08-02 18:18:53

回答

3

在這樣的情況下,我想我會強制電子郵件地址必須是唯一的,然後通過MembershipProvider.GetUserNameByEmail獲取用戶。

+0

謝謝,唯一的電子郵件地址已被強制執行。我只是不知道這種方法。 – 2010-08-02 18:55:30

+0

我只是低頭看着intellisense,當我找到FindUsersByEmail時停下來。 GetUserNameByEmail更好。 – harriyott 2012-07-05 12:41:57