2011-05-02 14 views
7

我在這裏有一些獨特的情況。我正在製作一個Web應用程序,該應用程序將具有使用不同Web應用程序憑據登錄的能力。例如,您可以登錄/註冊我的網站,或者您可以登錄/註冊您的YouTube帳戶。我沒有使用OpenID,因爲在這種情況下我需要訪問YouTube的數據。在運行時更改成員資格提供程序ApplicationName。怎麼樣?

我正在使用ASP.NET MVC 3 EF4自定義成員資格,角色,配置文件提供程序。

問題是用戶名不能是唯一的,因爲具有YouTube用戶名的用戶名可能與在我的網站上註冊的用戶名相同。所以我通過在用戶表中指定用戶類型來解決問題。這幾乎是一個組合鍵(用戶ID和用戶類型)。

我有一個自定義的授權屬性,它檢查用戶所在的角色,但現在我需要實現一個自定義IPrincipal,因爲我需要傳遞一個用戶類型。唯一的問題是我在哪裏存儲?會議?

原本我以爲這就是應用程序表過去,我不得不與一時成功,但閱讀有線程問題,而我得到的會話故障了這一切不是很大的地方:(

我想知道最好的辦法是因爲我不能在提供程序中使用重寫的方法,因爲我必須爲某些方法添加一個UserType參數,但這會中斷提供程序的功能。

編輯: 我基本上需要有能力在程序運行時更改ApplicationName我試着這樣做,唯一的問題是當我停止我的開發服務器,但離開我的瀏覽器打開,然後再次運行我的開發服務器它wouldnt保持應用程序名稱。

編輯: 我已經改變了我的應用程序使用OAuth,我從來沒有找到一個好的解決方案。

+0

大問題。過去我不得不這樣做,只有1/2的人喜歡我創建的解決方案。當我從我妻子那裏拿回我的電腦時,我會告訴你一些代碼。 :) – 2011-06-23 03:33:07

回答

-1

瑞安,

嗯......你可以工作,解決該問題通過預先發行-機構(本地或YouTube)的用戶名字段本身...例如用戶名: 「LOCAL/corlettk」,「 YOUTUBE/corlettk「???

好的,你需要一個自定義的Authenticator來分割複雜的字符串,然後將登錄請求轉到合適的底層Authenticator上去......但是一旦完成了,(我猜)你們都是開始着手處理EASILY的問題(從您的角度來看)授權。

我知道你是個聰明的人......你有沒有考慮過這種方法呢?

乾杯。基思。

PS:是的,我是一名黑客......但我有一種惡作劇的壞習慣......所以他們已經放棄試圖教育我。

+0

是的,我已經想到了這一點,但是如果我需要基於用戶類型是什麼頁面,現在我必須檢查用戶名字段並拆分字符串? – Ryan 2011-05-02 01:31:23

+0

嗯......如果(username.StartsWith(「LOCAL /」)'看起來對我來說太過分了,但是如果你發現自己經常在整個地方做這個事情,那麼可能是時候把它分解到你的繼承樹中,'LocalUser擴展用戶','YouTubeUser擴展用戶',這樣這個小決定就會在每個會話中進行一次(是的,我是一個Java人) – corlettk 2011-05-02 01:40:13

+0

如果沒有... Mate,你需要一個自定義的'IPrinciple.IsInRole'實現,它使用'IDomainIdentity extends IIdentity' ...是的,我認爲'Credentials'我們是會話的一個自然屬性。Atleast它對我來說「感覺不錯」(但我對MVC3一竅不通),我有興趣瞭解真正的專家有什麼要說的 – corlettk 2011-05-02 01:48:39

5

我基本上需要有改變應用程序名稱在 運行親語法的能力 。我想 這樣做,唯一的問題是,當 我停止開發服務器,但 離開我的瀏覽器中打開,然後又跑到我的dev 服務器它wouldnt保持 應用程序名稱。

如果您需要更改ApplicationName,這意味着您需要在運行時選擇提供者。 這樣做的唯一方法是不使用單身「Membership」,因爲它使用web.config中定義的提供程序。

不是每次都需要您的供應商使用:

MembershipProvider userProvider = Membership.Providers[UserProviderName]; 

只需設置UserProviderName你想要的方式。我會用一個自定義的全局授權或preAction過濾器來檢測來自某個cookie或其他會話變量的提供者,並將提供者放入HttpContextBase.Items集合中,該集合只存在一個請求。

+0

我喜歡這個解決方案。這允許每個「授權人」在需要時配置稍微不同(例如,不同的超時)。好想法! – 2011-06-23 03:30:13

+0

這個解決方案唯一的缺點是Membership類提供了一些真正有用的靜態方法,MembershipProvider沒有。所有的功能都在那裏,只是會員使用起來更容易一些。 – 2011-06-23 03:36:12

+0

你是對的,基本的提供者是非常基本的。你的應用程序有5%未被框架正確支持。 – Softlion 2011-06-28 15:39:04

相關問題