2013-08-05 495 views
2

我在SimpleMembership中使用ASP.NET MVC 4。當我爲特定用戶撥打WebSecurity.UserExists()時,它將返回true。但是,給定用戶存在於配置文件表中,但不存在於成員資格表中。WebSecurity.UserExists()返回錯誤的值

此功能的在線文檔與2表有矛盾的說法。一方面,它說

返回一個值,指示指定的用戶是否存在於成員數據庫中。

如果在用戶配置表中存在的用戶名再後來它說

真實的;否則,是錯誤的。

我維護我自己的用戶檔案表,讓SimpleMembership建立和維護自己的會員表(webpages_Membership)。有問題的用戶存在於我的個人資料表中,但不存在於網頁會員中。

我想讓用戶自行註冊,但只允許在個人資料表中有記錄的人這樣做。因此,此用戶存在於配置文件表中,但尚未註冊。當用戶嘗試註冊時,我希望能夠檢查他們是否在配置文件表中有記錄,但是此功能沒有達到我期望的效果。而且,更麻煩的是,文檔不清楚它是否檢查配置文件表或會員表。

+1

想想也許你可以把它分成更短的段落,這樣它更容易閱讀? – Amy

+1

除了@Amy在說什麼之外,您應該也可以添加一些代碼示例,因爲樣本比長段落更容易閱讀/理解。 – SOfanatic

+0

我試圖讓帖子更具可讀性,但你應該按照這裏的建議,並添加一個代碼片段,顯示什麼是不像你期望的那樣工作。 – jadarnel27

回答

1

縱觀WebSecurity和SimpleMembershipProvider代碼,我可以證實,它會檢查就能從UserTable也就是說,我們在調用InitializeDatabase指定表名的用戶,如下圖所示:

WebSecurity.InitializeDatabaseConnection("MyDbContext", "UserProfile", "UserId", 
           "UserName", true); 

所以在這種情況下,它會檢查用戶配置表中,當你撥打電話

WebSecurity.UserExists(userName); 

它傳播到你已經在初始化的時間關聯的的MembershipProvider,在MVC4默認爲

SimpleMembershipProvider

所以它去SimpleMembershipProvider.GetUser(),而且它會檢查這樣的:

SimpleMembershipProvider.GetUserId(database, this.SafeUserTableName, this.SafeUserNameColumn, this.SafeUserIdColumn, username); 

這清楚地表明它在user表中,而不是在成員表檢查。

我看到你的困惑,當他們說會員數據庫時,他們指的是你保存用戶數據的數據存儲,而不是會員表。

我不明白是什麼問題,其實,你只說:

當我打電話WebSecurity.UserExists()爲特定用戶,它返回true。但是,給定用戶存在於配置文件表中,但不存在於成員資格表中。

這是默認行爲。你期待什麼?

另外在我看來,我不認爲它是一個好主意,以確定用戶是否註冊或不使用成員表作爲UserTable中的每個用戶在成員表中有一個關聯的條目(可能不一定,但在我的情況我理解了)。

你不能在UserTable本身有一列IsRegistered來建立這個?

+0

目前這也讓我感到困惑,但我認爲你已經回答了OP的問題,這應該被接受。 – Michael12345