ASP.NET MVC 5 - 创建自己的登录

4

您好,

我对MVC 5(或任何其他MVC)非常陌生。我想创建自己的自定义登录和注册。有人可以指导一下吗?

登录应该有一个简单的电子邮件和密码文本框。注册应该有额外的数据,如名字/姓氏,年龄等,这些数据存储在表(用户)中,并具有用于选择的角色下拉框(存储在“角色”表中)。成功登录/注册后,用户应被重定向到仪表板。

或者,是否有适用于MVC 5的好教程..我只找到了一个适用于MVC 4

感谢您的帮助 :)


1
你的问题有点宽泛。请阅读[提问指南]。你想让这个自定义登录和注册做什么?它在注册时存储额外的信息吗?它会重定向到某个地方吗?它会跳舞吗? - Jack
@Jack 登录应该只有一个电子邮件和密码文本框。注册应该有额外的信息,如名字、姓氏、年龄等。这些数据应该存储在名为"user"的表中(在MS SQL Server 2012中)。注册应该有一个特殊的数据:一个角色下拉框,用户可以选择他的角色...这将被存储在另一个表(角色)中。如果用户成功注册,他应该被重定向到仪表板。当用户成功登录时,也应该重定向到仪表板。 - Robert Jaskowski
@Jack 我觉得这没什么特别的...但我不知道该怎么编码。我只有纯PHP的经验 :( - Robert Jaskowski
1个回答

4

试试这个

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = MyViewModels.checkUser(model.UserName, model.Password);
        if (user!=null)
        {
            SignInAsync();
            return RedirectToAction("Welcome");
        }
        else
        {
            ModelState.AddModelError("", "Invalid username or password.");
        }
    }
    return View(model);
}

private void SignInAsync()
{
    var claims = new List<Claim>();
    claims.Add(new Claim(ClaimTypes.Name, "UserName"));
    claims.Add(new Claim(ClaimTypes.Email, "User@mail.com"));
    var id = new ClaimsIdentity(claims,
                                DefaultAuthenticationTypes.ApplicationCookie);

    var ctx = Request.GetOwinContext();
    var authenticationManager = ctx.Authentication;
    authenticationManager.SignIn(id);
}

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

如果您在操作中添加 [Authorize] 属性,则只有用户名称和密码被授权,它才会重定向

从数据库获取用户名和密码的函数

public static UserTable checkUser(string userName, string password)
{
    DemoEntities db = new DemoEntities();
    var query = (from u in db.UserTables
                 where u.UserName == userName && u.Password == password
                 select u).FirstOrDefault();
    if(query!=null)
        return query;
    else
        return null;
}

找不到类型或命名空间名称“UserTable”(您是否缺少使用指令或程序集引用?)。 - WIRN
@WIRN,UserTable是数据库中的一个表名。该表可以从实体框架中访问。 - Golda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接