-->

Authentication với ASP.NET Core Identity #4 Tạo chức năng đăng nhập tài khoản

Với nhiều yêu cầu của phần mềm, mà một số không cần đến chức năng đăng ký, mà chỉ có chức năng đăng nhập, tuy nhiên để thực hiện chức năng này thì phải Identity chúng ta chỉ cần vài bước cơ bản.

Tạo chức năng đăng nhập tài khoản

Bước 1. Trong IdentityAuth.Data/ViewModels thêm LoginViewModel.cs:

public class LoginViewModel
    {
        [Required]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Display(Name = "Remember me")]
        public bool RememberMe { get; set; }

        public string ReturnUrl { get; set; }
        public IList<AuthenticationScheme> ExternalLogins { get; set; }
    }

Để dùng AuthenticationScheme, ta cài đặt NugetPackage: Microsoft.AspNetCore.Authentication.Abstractions 

Bước 2. Thêm mới các phương thức sau trong AccountController.cs:

[HttpGet]
        [Route("login")]
        public async Task<IActionResult> Login(string returnUrl)
        {
            LoginViewModel model = new LoginViewModel
            {
                ReturnUrl = returnUrl,
                ExternalLogins =
                (await signInManager.GetExternalAuthenticationSchemesAsync()).ToList()
            };

            return View(model);
        }

        [HttpPost]
        [Route("login")]
        public async Task<IActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var result = await signInManager.PasswordSignInAsync(
                    model.Email,
                    model.Password,
                    model.RememberMe,
                    false);
                if (result.Succeeded)
                {
                    if (!string.IsNullOrEmpty(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("index", "home");
                    }
                }

            }
            return View(model);
        }

        [Route("logout")]
        [HttpGet]
        public async Task<IActionResult> Logout()
        {
            await signInManager.SignOutAsync();
            return RedirectToAction("index", "home");
        }

        // This method added for role tutorial
        [HttpGet]
        [Route("access-denied")]
        public IActionResult AccessDenied()
        {
            return View();
        }
 
Bước 3. Add view cho login:

@model LoginViewModel

@{
    ViewBag.Title = "User Login";
}

<h1>User Login</h1>

<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="All" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Email"></label>
                <input asp-for="Email" class="form-control" />
                <span asp-validation-for="Email" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password"></label>
                <input asp-for="Password" class="form-control" />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>
            <div class="form-group">
                <div class="checkbox">
                    <label asp-for="RememberMe">
                        <input asp-for="RememberMe" />
                        @Html.DisplayNameFor(m => m.RememberMe)
                    </label>
                </div>
            </div>
            <button type="submit" class="btn btn-primary">Login</button>
        </form>
    </div>
</div>
 
Bước 4. Thêm nút đăng nhập

<a class="nav-link text-dark" asp-area="Admin" asp-controller="Account" asp-action="Login">Login</a>

Vậy là xong. Nhưng khi đăng nhập xong nó sẽ direct qua trang admin, vậy ta tạo luôn trang admin. 

Bước 5. Tại Controller trong area thêm mới HomeController.cs:

[Area("Admin")]
    [Route("admin/home")]
    [Route("admin")]
    public class HomeController : Controller
    {
        [Route("index")]
        [Route("")]
        public IActionResult Index()
        {
            return View();
        }
    }
 
Bước 6. Add view cho controller trên với nội dung hiển thị bất kỳ nhé.

Lời kết

Trong series này, các bài viết, các chức năng có liên kết liên quan đến nhau, để làm bài này hay các bài sau này các bạn cần xem lại các bài trước.

Và bài tiếp theo chúng ta sẽ tiếp sẽ tiếp tục với các nghiệp vụ hiển thị theo quyền, hiển thị danh sách quyền, phân quyền,... Hãy luôn theo dõi blog mình nhé.

Mong bài viết có ích với các bạn, chúc các bạn thành công.

By Hiếu Quốc.

Có lẽ bạn thích?

4 comments

Post a Comment