[.net] MVC에서 web.config 사용해서 Login 로직 만들기

Posted by RAY.D
2015. 4. 16. 05:51 Web/ASP.NET MVC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



1. Edit ~\web.config to include the following forms-based authentication configuration.

1
2
3
4
5
<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="30" />
    </authentication>
</system.web>

2. Register AuthorizeAttribute in ~\App_Start\FilterConfig.cs.

1
filters.Add(new AuthorizeAttribute());

3. Add view model LogOnViewModel in ~\Models\Account\LogOnViewModel.cs.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class LogOnViewModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }
 
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
 
    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

4. Add controller AccountController and LogOn action methods for both HttpGet & HttpPost.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class AccountController : Controller
{
    //
    // GET: /Account/LogOn
    [AllowAnonymous]
    public ActionResult LogOn()
    {
        LogOnViewModel model = new LogOnViewModel();
 
        return View(model);
    }
 
    //
    // POST: /Account/LogOn
    [AllowAnonymous]
    [HttpPost]
    public ActionResult LogOn(LogOnViewModel model, string returnUrl)
    {
        if (this.ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (this.Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
 
        // If we got this far, something failed, redisplay form
        this.ModelState.AddModelError("", "Incorrect user name or password.");
        return View(model);
    }
 
    //
    // POST: /Account/LogOff
    [HttpPost]
    public ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
 
        return RedirectToAction("Index", "Home");
    }
}

5. Add view in ~\Views\Account\LogOn.cshtml.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@model SecurityApp.Models.Account.LogOnViewModel
@{
    Layout = null;
    ViewBag.Title = "Log On";
 
    ViewBag.ReturnUrl = Request["ReturnUrl"];
}
<!DOCTYPE html>
<html>
......
<body>
    <h2>@ViewBag.Title</h2>
    @using (Html.BeginForm(null, null, new { returnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)<br />
        @Html.TextBoxFor(m => m.UserName, new { placeholder = Html.DisplayNameFor(m => m.UserName) })<br />
        @Html.PasswordFor(m => m.Password, new { placeholder = Html.DisplayNameFor(m => m.Password) })<br />
        @Html.CheckBoxFor(m => m.RememberMe)
        @Html.DisplayNameFor(m => m.RememberMe)<br />
        <button type="submit">Log On</button>
    }
 
    ......
</body>
</html>

6. In ~\Views\Shared\_Layout.cshtml, add a HTML form to handle log off.

1
2
3
4
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logOffForm" }))
{
    @Html.AntiForgeryToken()
}

7. In ~\Views\Shared\_Layout.cshtml, add a hyperlink to log off.

1
<a href="javascript:$('#logOffForm').submit()">Log Off</a>