Authentication

Install dulu aspnet-code-generator

dotnet tool install -g dotnet-aspnet-codegenerator

Lalu install semua package yang dibutuhkan

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.UI
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

hasilnya akan menjadi seperti ini: klik disini

Setelah itu, ubah model User kalian:

  • Tambahkan using Microsoft.AspNetCore.Identity

  • Turunkan model User kalian dari base class IdentityUser

  • Hapus field Id dari model User

  • Hapus field Email,Username,Password atau sejenisnya jika ada

Hasilnya menjadi: klik disini

Setelah mengubah model user, ubah juga DbContext mu, dari yang awalnya:

    public class NamaDbContext : DbContext

menjadi (dimana User adalah model User mu):

    public class NamaDbContext : IdentityDbContext<User>

jangan lupa juga menambahkan using directives:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

dan menghapus baris DbSet<User> Users

Hasil: klik disini

Jika sudah, ketahui dulu full name dari data context dan model user mu, fullname adalah Namespace+Nama class, jadi jika nama class dbcontextnya adalah TodoContext dan namespace nya TodoNetExample.Data maka fullname nya adalah TodoNetExample.Data.TodoContext, model juga sama.

Jika sudah mengetahui fullname dbcontext dan user model, lakukan scaffolding dengan cara (ganti fullnamedbcontext dan usermodel dengan yang sudah diketahui tadi):

dotnet aspnet-codegenerator identity -dc <FullNameDataContextMu> --files "Account.Register;Account.Login;Account.Logout"

Lakukan migrasi dan update:

dotnet ef migrations add AddIdentitySchema
dotnet ef database update

Tambahkan

app.UseAuthentication();

di method Configure di file Startup.cs link github, dan di file yang sama, pada method ConfigureServices, tambahkan

services
    .AddDefaultIdentity<User>()
    .AddEntityFrameworkStores<TodoContext>()
    .AddDefaultTokenProviders();
services.AddRazorPages();

link github

Lalu pada file Views/Shared/_Layout.cshtml, tambahkan

<partial name="_LoginPartial"/>

link github

Untuk mengakses user yang saat ini sudah login, pertama tambahkan instance variable dengan tipe UserManager<User> dimana User adalah nama modelmu

private UserManager<User> _userManager;

public HomeController(ILogger<HomeController> logger, TodoContext context, UserManager<User> userManager)
{
    _logger = logger;
    _context = context;
    _userManager = userManager;
}

Lalu untuk mengambil data user:

var userId = _userManager.GetUserId(User);
var user = _context.Users.Find(userId);

Untuk membatasi akses user (harus login), tambahkan atribut [Authorize] diatas deklarasi controller, jika ingin seluruh controller di restrict, atau pada beberapa method saja:

[Authorize]
public class HomeController : Controller

Last updated