首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有ASP.NET成员资格和授权的自定义数据库

问具有ASP.NET成员资格和授权的自定义数据库
EN

Stack Overflow用户
提问于 2013-12-08 23:06:13
回答 1查看 682关注 0票数 1

我正在学习ASP.NET MVC,并且我以前从未使用过.Net授权和成员工具。

我正在创建一个应用程序,它将允许用户登录和他们拥有的动物,因此它将有许多表

在教程中,我看到了成员资格和授权工具似乎为登录数据创建了一个新的数据库。这如何与我自己的定制表一起工作?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-12-09 00:10:00

如果你有定制表,这真的很容易做到。但在这种情况下,您必须手动检查密码。

这里有几个简单的步骤。

首先,将表单授权添加到web.config文件:

代码语言:javascript
复制
<authentication mode="Forms">
  <forms loginUrl="~/login" defaultUrl="/" name=".ASPXFORMSAUTH" protection="All" slidingExpiration="true" path="/" timeout="50000000" />
</authentication>

确保在RouteConfig.cs中正确配置了控制器

代码语言:javascript
复制
    routes.MapRoute("Login", "login", new { controller = "Login", action = "Login" });

根据存储在现有表中的信息,创建自己的密码验证函数:

代码语言:javascript
复制
public bool ValidatePassword(string email, string password)
{
    bool isValid = false;

    // TODO: put your validation logic here

    return isValid;
}

请注意,您可以使用用户名或电子邮件。我更喜欢电子邮件,因为用户永远不会忘记他们的电子邮件,但通常会有几个用户名。

创建登录控制器:

代码语言:javascript
复制
public class LoginController : Controller
{

    [HttpGet]
    public ActionResult Login()
    {
        if(Request.IsAuthenticated)
        {
            return View("AlreadyLoggedIn");
        }

        return View();
    }

    [HttpPost, ValidateAntiForgeryToken]
    public ActionResult Login(LoginViewModel viewModel)
    {
        if(ModelState.IsValid)
        {
            var isPasswordValid = ValidatePassword(viewModel.Email, viewModel.Password);
            if(isPasswordValid)
            {
                FormsAuthentication.SetAuthCookie(viewModel.Email, true);

                // now the user is authenticated
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("password", "Invalid password");
            }
        }
        return View(viewModel);
    }
}

查看模型非常简单:

代码语言:javascript
复制
public class LoginViewModel
{
    [Required(ErrorMessage = "Please type your email")]
    [EmailAddress(ErrorMessage = "Please provide correct email address")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Please type your password")]
    public string Password { get; set; }
}

如果您想限制对某些页面的访问,请使用Authorize属性:

代码语言:javascript
复制
public class AnotherController : Controller
{
    [Authorize, HttpGet]
    public ActionResult Index()
    {
    ...
    }
}

总而言之,您只需要将所有数据库登录验证逻辑放到ValidatePassword函数中,仅此而已!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20454888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档