Opsætning af ASP.NET Identity: En Komplet Guide

Startet af Hacza, Apr 10, 2025, 01:56 PM

Forrige emne - Næste emne

0 Brugere og 1 Gæst læser dette emne.

Hacza

ASP[DOT]NET Identity er et kraftfuldt og fleksibelt system til brugerhåndtering i ASP[DOT]NET-applikationer. Det giver dig mulighed for at implementere login, registrering, adgangskodehåndtering og roller med minimal indsats. I denne guide vil vi gennemgå, hvordan du installerer og konfigurerer ASP[DOT]NET Identity i et projekt, vise kodeeksempler og besvare almindelige spørgsmål.

Hvad er ASP[DOT]NET Identity?
ASP[DOT]NET Identity er en moderne autentificerings- og autorisationsramme, der erstatter ældre systemer som ASP[DOT]NET Membership. Det understøtter funktioner som tofaktorautentificering, eksterne logins (f.eks. Google eller Facebook) og tilpasning af brugerdata.

Forudsætninger
Før du starter, skal du have:
  • Visual Studio installeret (2022 anbefales).
  • Et nyt eller eksisterende ASP[DOT]NET Core-projekt.
  • Grundlæggende kendskab til C# og MVC eller Razor Pages.

Trin-for-trin opsætning
1. Opret et nyt projekt
Start med at oprette et nyt ASP[DOT]NET Core-projekt i Visual Studio:
  • Vælg "ASP[DOT]NET Core Web App" (med MVC eller Razor Pages).
  • Vælg "Individual Authentication" under autentificeringsindstillingerne for at få en grundlæggende Identity-opsætning med det samme.

2. Installér Identity-pakker (hvis nødvendigt)
Hvis du arbejder med et tomt projekt, skal du tilføje Identity-pakker via NuGet. Åbn NuGet Package Manager og installer:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer

3. Konfigurér Identity i Program.cs
I ASP[DOT]NET Core 6 eller nyere sker konfigurationen i Program.cs. Tilføj følgende kode:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// Tilføj DbContext og Identity
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Konfigurér middleware
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

// DbContext klasse
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

4. Opret forbindelsesstrengen
I appsettings.json skal du tilføje en forbindelsesstreng til din database:
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MinIdentityDb;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

5. Kør migrationer
Åbn Package Manager Console og kør:
Add-Migration InitialCreate
Update-Database

Dette opretter databasetabellerne til Identity.

6. Tilføj registrering og login
ASP[DOT]NET Identity leverer færdige sider til registrering og login, hvis du bruger scaffolding. For at tilføje dem:
  • Højreklik på projektet > "Add" > "New Scaffolded Item".
  • Vælg "Identity" og vælg de sider, du ønsker (f.eks. Register, Login).

Alternativt kan du oprette en simpel controller til registrering:
public class AccountController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;

    public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    [HttpPost]
    public async Task<IActionResult> Register(string email, string password)
    {
        var user = new IdentityUser { UserName = email, Email = email };
        var result = await _userManager.CreateAsync(user, password);

        if (result.Succeeded)
        {
            await _signInManager.SignInAsync(user, isPersistent: false);
            return RedirectToAction("Index", "Home");
        }
        return View();
    }
}


Kodeeksempler
Login-funktion
[HttpPost]
public async Task<IActionResult> Login(string email, string password)
{
    var result = await _signInManager.PasswordSignInAsync(email, password, false, false);
    if (result.Succeeded)
    {
        return RedirectToAction("Index", "Home");
    }
    return View();
}

Udl logning
[HttpPost]
public async Task<IActionResult> Logout()
{
    await _signInManager.SignOutAsync();
    return RedirectToAction("Index", "Home");
}


FAQS – Ofte Stillede Spørgsmål
1. Hvorfor får jeg en fejl om "No DbContext"?
Sørg for, at din ApplicationDbContext er korrekt konfigureret i Program.cs, og at forbindelsesstrengen i appsettings.json peger på en gyldig database.

2. Kan jeg tilpasse brugerdata?
Ja! Opret en brugerklasse, der arver fra IdentityUser, og tilføj dine egne felter:
public class ApplicationUser : IdentityUser
{
    public string FuldtNavn { get; set; }
}

Opdater derefter IdentityDbContext til at bruge ApplicationUser.

3. Hvordan tilføjer jeg roller?
Brug RoleManager:
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
await roleManager.CreateAsync(new IdentityRole("Admin"));

4. Hvad hvis jeg vil bruge en anden database end SQL Server?
Skift UseSqlServer til f.eks. UseSqlite eller UseInMemoryDatabase i Program.cs, og installer den relevante EF Core-pakke.

5. Hvordan sikrer jeg mine sider?
Brug [Authorize]-attributten på controllere eller metoder:
[Authorize]
public IActionResult HemmeligSide()
{
    return View();
}

Afslutning
ASP[DOT]NET Identity gør det nemt at tilføje sikker og professionel brugerhåndtering til dine projekter. Med ovenstående trin og eksempler kan du hurtigt komme i gang. Eksperimentér med funktionerne, og tilpas dem til dine behov!