Skip to main content

Command Palette

Search for a command to run...

Add User Authentication to ASP.NET Core MVC 7 App

Published
2 min read
M

Mohamad's interest is in Programming (Mobile, Web, Database and Machine Learning). He is studying at the Center For Artificial Intelligence Technology (CAIT), Universiti Kebangsaan Malaysia (UKM).

Continue from https://hashnotes.hashnode.dev/adding-validation-to-aspnet-core-mvc-7-app-with-sqlite

In this tutorial, you’ll learn how to add user authentication to your ASP.NET Core MVC 7 app running in Replit , using Entity Framework Core and SQLite .

You'll:

  • Set up identity services

  • Create a login/register system

  • Protect pages with authorization

  • Use SQLite as the database backend

Prerequisites

Before starting this tutorial, you should already have:

  • A working ASP.NET Core MVC 7 app in Replit

  • Entity Framework Core and SQLite configured

  • EF migrations created and applied\A basic CRUD controller and views

Step 1: Install Required Identity Packages

Replit requires local tooling and specific versions of Identity packages. Run these commands:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 7.0.20

dotnet add package Microsoft.AspNetCore.Identity.UI --version 7.0.20

dotnet add package Microsoft.AspNetCore.Identity --version 7.0.20

Step 2: Update AppDbContext to Inherit from IdentityDbContext

Open Data/AppDbContext.cs:

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using MyMvcApp.Models;

namespace MyMvcApp.Data
{
    public class AppDbContext : IdentityDbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        {
        }

        public DbSet<BlogPost> BlogPosts { get; set; } = null!;
    }
}

Step 3: Register Identity Services in Program.cs

Update Program.cs to register Identity services and use cookies for authentication.

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using MyMvcApp.Data;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var connectionString = "Data Source=blog.db";

// Register Entity Framework Core with SQLite
builder.Services.AddSqlite<AppDbContext>(connectionString);

// Register ASP.NET Core Identity with simplified password policy
builder.Services.AddDefaultIdentity<IdentityUser>(options =>
{
    options.SignIn.RequireConfirmedAccount = false;
    options.Password.RequireDigit = false;
    options.Password.RequireLowercase = false;
    options.Password.RequireUppercase = false;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequiredLength = 4;
})
.AddEntityFrameworkStores<AppDbContext>();

// Configure cookie-based authentication
builder.Services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = "/Identity/Account/Login";
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
});

// Add Controllers and Views
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}
else
{
    app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

// Enable Authentication and Authorization
app.UseAuthentication(); // Must be before UseAuthorization
app.UseAuthorization();

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

// Enable Razor Pages (needed for Identity UI)
app.MapRazorPages();

app.Run();

Step 4: Add Login View

Create _LoginPartial.cshtml:

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

<ul class="navbar-nav ms-auto">
@if (SignInManager.IsSignedIn(User))
{
    <li class="nav-item">
        <a class="nav-link" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
    </li>
    <li class="nav-item">
        <form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" method="post">
            <button type="submit" class="nav-link btn btn-link">Logout</button>
        </form>
    </li>
}
else
{
    <li class="nav-item">
        <a class="nav-link" asp-area="Identity" asp-page="/Account/Register">Register</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
}
</ul>

Run Migrations

dotnet ef migrations add AddIdentityTables --project workspace.csproj
dotnet ef database update --project workspace.csproj

.