我有一个应用程序,其中一个用户名可以属于许多公司。因此,为了区分它们,我需要使用用户名和密码作为唯一对来登录。如何在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模板吗?如果 –