我有一個應用程序,其中一個用戶名可以屬於許多公司。因此,爲了區分它們,我需要使用用戶名和密碼作爲唯一對來登錄。如何在asp.net中使用3個參數登錄mvc
我正在使用ASP.NET MVC,我很想知道登錄發生的位置。 其實我可以看到它驗證用戶的位置,但我找不到它檢索用戶的位置。
那麼,其中username = XX和密碼= XX發生
選擇用戶?
不同地問:我沒有找到用戶設置?我看到User.Identity.Name它的代碼,但我沒有看到: 用戶=選擇....
感謝 約翰
我有一個應用程序,其中一個用戶名可以屬於許多公司。因此,爲了區分它們,我需要使用用戶名和密碼作爲唯一對來登錄。如何在asp.net中使用3個參數登錄mvc
我正在使用ASP.NET MVC,我很想知道登錄發生的位置。 其實我可以看到它驗證用戶的位置,但我找不到它檢索用戶的位置。
那麼,其中username = XX和密碼= XX發生
選擇用戶?
不同地問:我沒有找到用戶設置?我看到User.Identity.Name它的代碼,但我沒有看到: 用戶=選擇....
感謝 約翰
約翰,你正在使用MVC。除了LINQ語法外,您不會在代碼中看到任何查詢。我猜你正在嘗試做的是用戶表和公司表之間的多對多關係。 (一個用戶有多個公司,一個公司有多個用戶) 非常多的數據庫明智這意味着你需要一個額外的表,公司和用戶的兩個首要鍵。
回到你的問題。 ASP.net MVC有自己的會員供應商。你可以選擇使用默認的表格或覆蓋它,並創建你自己的定製會員供應商(有能力使用你自己的用戶表)
默認的一個應該包含大部分基本屬性。 (密碼重置,密碼鹽,電子郵件..) http://www.asp.net/web-forms/tutorials/security/membership/creating-the-membership-schema-in-sql-server-cs 跳到步驟:安裝應用程序服務生成表
但是猜你已經有一個數據庫,你自己的用戶表。你應該覆蓋自定義成員資格類。
只要這意味着你做的是從抽象類「的MembershipProvider」
public class MyMembershipProvider : MembershipProvider
{
}
繼承之後,你必須讓ASP知道你將覆蓋與你默認的MembershipProvider在網絡的新類的.config:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear />
<add name="MyMembershipProvider"
applicationName="MyApp"
Description="My Membership Provider"
passwordFormat="Clear"
connectionStringName="MyMembershipConnection"
type="MyApp.MyMembershipProvider" />
</providers>
</membership>
的成員資格提供一些方法需要你返回或使用的對象的MembershipUser。如何實現這一切就在這裏: http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.aspx 這不是一個必要的步驟,但其建議。
祝你好運:)約翰如果 在孤單的解釋混淆,不要猶豫問
謝謝安東尼。你對模型部分是正確的。所以我創建了一個自定義MemberShipser。現在我看不到我的用戶在哪裏?我已經重載了VerifyMethod,但我沒有看到在哪種方法中我將創建用戶?如果它是GetUser,它將在哪裏被調用? – user96547
除非你已經實現了自定義membershipprovider(一個實現接口MembershipProvider方法的類),否則你不能對membershipuser做任何事情。實現您的Web應用程序所需的方法。 (我建議寫一個單獨的庫用於用戶表,並在成員類中使用它。我建議建立一個爲的MembershipUser因爲Membership.getUser()返回該類的對象的原因。總之,這意味着你從讀取當前用戶數據庫與存儲庫,並使用屬性來填充membershipuser對象 –
答案很簡單:
你的代碼描述發生在賬戶控制器的登錄操作幕後:
MembershipService.ValidateUser(model.UserName, model.Password)
這對於一個有效的用戶返回true。
FormsService.SignIn(model.UserName, model.RememberMe)
(你可以看到Models文件夾下,都在AccountModels定義的那些功能的文件)
如果你也想:用戶然後在下一行代碼「登錄」在驗證用戶的同時檢查公司ID,然後您需要編寫自己的驗證方法來替換ValidateUser。 THS將取決於你正在使用的爲您的商店(SQL?)
但是,作爲一個更廣泛的觀點,最佳做法,你不應該允許不同的用戶相同的用戶名。這只是一個壞主意,會導致麻煩。
UPDATE:
如果我是建議如何做到這一點,我建議你的用戶ASP.NET成員資格的用戶配置方面。它旨在捕獲和存儲其他用戶變量(例如公司),同時仍然使用他們爲您編寫的精心構建和安全的成員資格。閱讀它,但下面是我目前正在開發的應用程序中的CreateUser函數。請注意我如何使用配置文件來存儲名和姓,以及用戶需要重置密碼的標誌。
同樣,這將搶先擁有多個用戶使用相同用戶名的能力,但我真的認爲你應該避免這種情況。
[HttpPost]
public ActionResult CreateUser(string username, string email, string first, string last, string role)
{
string password;
MembershipUser user;
//Generate a random password
password = Auth.CreateRandomPassword(6);
try
{
//Create the user
user = Membership.CreateUser(username, password, email);
//Add the user to the chosen role
Roles.AddUserToRole(username, role);
//Create the user profile
UserProfile profile = UserProfile.GetUserProfile(username);
profile.FirstName = first;
profile.LastName = last;
profile.ForcePasswordReset = true;
profile.Save();
EmailNewUser(username, email, password);
}
catch (Exception ex)
{
HttpContext.Response.StatusCode = 500;
HttpContext.Response.StatusDescription = ex.Message;
HttpContext.Response.Clear();
}
return PartialView("UserTable", Auth.Users());
}
如果兩個用戶(約翰)從兩個不同的公司(A和B)都希望使用的密碼(「thisisabadpassword 「)? – hometoast
好問題:目前我不會允許這個。 – user96547
你在VS2010中使用MVC模板嗎?如果 –