簡體   English   中英

MVC3 +如何獲取當前登錄用戶的用戶名

[英]MVC3 + How to get the current logged on user's user name

我是MVC的新手,實際上是Web開發的新手。 我有大約7年的開發經驗,但在服務,數據庫,對象模型等方面......基本上是中間層和后端開發。 我正在嘗試學習ASP.NET,並決定使用MVC3為我自己的個人網站構建一個站點。 我將通過dotnet-hosts.com上的一個帳戶托管這個。 這是我的問題...我沒有域名,我將使用內置的成員資格提供程序。 我注意到在我添加項目模板時創建的自動生成的代碼,在方法ChangePasswordChangePasswordModel模型)的AccountController中有這行代碼...

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);

我的問題是圍繞User.Identity.Name ,這看起來像將返回Windows用戶名,就像Environment.UserName那樣。 我使用的Visual Studio模板是(Mobile Ready HTML5 MVC.NET)因為我希望能夠從任何設備支持客戶端... Windows PC,Apple,Windows Phone,iPhone等...如果調用User.Identity.Name是正確的然后我想問一下這對於不像Windows的Windows設備有什么用? 如果我的假設是正確的,這只適用於具有域的Windows計算機,那么我該如何實現呢? 我是否需要使用一些緩存? 如果是這樣,我可以從認證頁面獲取用戶名和IP地址作為緩存密鑰嗎?

我的高級問題是......無論設備/平台如何,我如何獲得當前登錄用戶的userName? 我知道這個問題可能寫得不好而且可能很難理解......我為此道歉。 我是網絡開發的新手,並試圖讓我的腳濕透,並希望開始使用最新的技術。

電話是正確的。 User.Identity.Name由正在使用的任何身份驗證提供程序填寫 - Windows身份驗證,表單身份驗證,某些自定義身份驗證提供程序或其他。 它不受特定用戶“類型”的約束。 身份驗證提供程序負責確保Identity對象在每個請求中對應於當前用戶。 通常使用cookie和數據庫的組合來處理該部分。

MVC模板(雖然我從未看過模板,因為MVC 2)使用ASP.NET的Membership類,后者又使用成員資格提供程序 - 例如SqlMembershipProviderActiveDirectoryMembershipProvider - 前者存儲用戶的憑據(用戶名和密碼等)在SQL Server數據庫中,后者使用Active Directory(即主要是Windows登錄)。 SqlMembershipProvider是默認設置,MVC設置為使用本地SQLExpress數據庫文件作為其用戶存儲。

在模板項目中實現的身份驗證提供程序使用FormsAuthentication ,它通過簡單的HTML表單( LogOn視圖中的表單)執行登錄過程,並通過加密cookie保持用戶登錄。 適用於任何平台。

可以在web.config(站點根目錄中的那個)中找到FormsAuthentication和SqlMembershipProvider的設置。 在那里,您可以找到SQLExpress數據庫的連接字符串(例如,如果需要,可以將它們更改為使用“真正的”SQL Server),登錄超時等。

(請注意,您可以通過Visual Studio中解決方案資源管理器工具欄中的“ASP.NET配置”按鈕在GUI中輕松完成大量配置 - 它還提供了一種設置第一個用戶的簡便方法)。

簡而言之,它已經准備就緒 - 並且不會鎖定非Windows用戶。

就像你說User.Identity.Name確實是正確的。 用於返回登錄用戶名。 但像你說的會員部分只提供Windows帳戶。 您可以在沒有Windows帳戶用戶的情況下使用類似的方法在每個方案中工作,並且仍然可以針對Windows進行驗證(如果存在)。 如果您在沒有成員資格的情況下調用它,並遵循默認的MVC3模板,它應該可以正常工作。

String Username = User.Identity.Name;

當您使用模板MVC3登錄時,它會創建一個authcookie 請參閱帳戶控制器代碼 這里,兩個參數傳遞給它。 用戶名和持久性(當瀏覽器關閉時 - 登錄仍然被緩存)。

用戶名是一個字符串字段,這是User.Identity.Name所調用的,事實上,任何東西都可以放入其中,並且不會以任何方式鏈接到Windows登錄。

您可以通過所需的方法測試登錄,如果是,請使用authcookie方法設置cookie。 (它的encripted)。 並將用戶名設置為您想要的。 如果您對用戶的驗證失敗,請不要創建一個,並重新更新回頁面。

請參閱示例代碼。 這完全來自記憶,因為我沒有代碼在我面前供參考。 但它全部在帳戶控制器中,登錄操作。

設置cookie后,將為會話緩存用戶登錄狀態。 您需要確保用戶在訪問網頁時已登錄。 否則登錄將毫無意義。 這是控制器/操作的簡單屬性。

注意:不要對帳戶/登錄控制器執行此操作,因為您無法登錄登錄頁面,因為您尚未登錄。

[Authorize]
public ActionResult DoSomething()
{
    // ...
}

希望我有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM