Authentication
Install dulu aspnet-code-generator
dotnet tool install -g dotnet-aspnet-codegeneratorLalu 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.Toolshasilnya akan menjadi seperti ini: klik disini
Setelah itu, ubah model User kalian:
Tambahkan
using Microsoft.AspNetCore.IdentityTurunkan model
Userkalian dari base classIdentityUserHapus field
Iddari modelUserHapus field
Email,Username,Passwordatau sejenisnya jika ada
Hasilnya menjadi: klik disini
Setelah mengubah model user, ubah juga DbContext mu, dari yang awalnya:
public class NamaDbContext : DbContextmenjadi (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 updateTambahkan
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();Lalu pada file Views/Shared/_Layout.cshtml, tambahkan
<partial name="_LoginPartial"/>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 : ControllerLast updated