适用于初学者的ASP.NET MVC自定义成员资格

时间:2010-09-15 12:18:17

标签: asp.net-mvc membership provider

我正在创建自己的网站和博客,我想第一次在数据库中使用我(我的名字和密码),也许稍后会为其他人注册,但首先只为我登录并通过授权进行管理。我不想使用MS的会员资格。我想从头开始创建我自己的,所以我正在寻找初学者的指南,但我找到了角色,权利的大指南。我想要一个小例子,检查用户名,数据库中的密码和登录数据。 感谢帮助 LIBOR

3 个答案:

答案 0 :(得分:5)

即使您不想使用成员资格和角色提供程序数据存储,您仍然可以使用身份验证。相信我,这比建立自己的要容易得多。以下是它的工作原理:

我们会说您已经拥有用户存储设置来检索用户名和密码。为了简单起见,我假装你有一个名为DataLayer的静态类,它包含用于从数据库(或你使用的任何存储器)中提取信息的数据检索方法。

首先,您需要一种让用户登录的方法。因此,请设置包含用户名和密码字段的页面。然后在页面发布的操作方法中设置一个快速if语句:

    if (DataLayer.UserExists(userModel.Username))
    {
         User userFromDB = DataLayer.GetUser(userModel.Username);
         if (userFromDB.Password == userModel.Password)
         {
              FormsAuthentication.SetAuthCookie(userFromDB.Username, checkBoxRememberMe.Checked);
              //Use userFromDB as the username to authenticate because it will 
              //preserve capitalization of their username the way they entered it
              //into the database; that way, if they registered as "Bob" but they
              //type in "bob" in the login field, they will still be authenticated
              //as "Bob" so their comments on your blogs will show their name
              //the way they intended it to.

              return "Successfully logged in!";
         }
    }

    return "Invalid username or password.";

现在他们已经过身份验证,您可以在代码中使用Page.User.Identity.IsAuthenticated来查明他们是否已登录。喜欢这个:

if (User.Identity.IsAuthenticated)
{
     DataLayer.PostBlogComment(User.Identity.Name, commentBody);
     //Then in your controller that renders blog comments you would obviously 
     //have some logic to get the user from storage by the username, then pull
     //their avatar and any other useful information to display along side the
     //blog comment. This is just an example.
}

此外,您可以将整个操作方法甚至整个控制器锁定到通过表单身份验证提供程序进行身份验证的用户。您所要做的就是将这些标签添加到您的操作方法/控制器中:

[Authorize]
public ActionResult SomeActionMethod()
{
    return View();
}

[Authorize]属性将阻止未登录的用户访问该操作方法,并将其重定向到您的登录页面。如果使用内置角色提供程序,则可以使用此相同属性过滤掉角色。

[Authorize(Roles="Admin, SalesReps")]
public ActionResult SomeActionMethod()
{
    return View();
}

这些属性也可以添加到控制器类之上,以将其逻辑应用于整个控制器。

编辑:要记录用户,只需拨打FormsAuthentication.SignOut();

即可

答案 1 :(得分:1)

嘿@Bibo,好不选择会员提供商。我认为UserService或类似的提供创建,验证用户和一些更多方法的方法就足够了。建议使用密码哈希和密码盐作为用户密码。 Here是一个很好的链接。还看看我前段时间给过的this answer

祝你好运!

编辑: rememberMe参数应改名为keepMeSignedIn。

答案 2 :(得分:1)

关于表单身份验证的这篇文章为您提供了大量有关创建自己的简单安全系统的信息,尤其是有关FormsAuthenticationTicket的信息。

http://support.microsoft.com/kb/301240