64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System.Security.Claims;
|
|
|
|
namespace NoticeBoard.Controllers;
|
|
|
|
public class AccountController : Controller
|
|
{
|
|
private readonly IConfiguration _config;
|
|
|
|
public AccountController(IConfiguration config)
|
|
{
|
|
_config = config;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult Login(string? returnUrl = null)
|
|
{
|
|
if (User.Identity?.IsAuthenticated == true)
|
|
return RedirectToAction("Index", "Admin");
|
|
|
|
ViewBag.ReturnUrl = returnUrl;
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> Login(string username, string password, string? returnUrl = null)
|
|
{
|
|
var adminUser = _config["Admin:Username"] ?? "admin";
|
|
var adminPass = _config["Admin:Password"] ?? "admin";
|
|
|
|
if (username == adminUser && password == adminPass)
|
|
{
|
|
var claims = new List<Claim>
|
|
{
|
|
new Claim(ClaimTypes.Name, username),
|
|
new Claim(ClaimTypes.Role, "Admin")
|
|
};
|
|
|
|
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
|
|
var principal = new ClaimsPrincipal(identity);
|
|
|
|
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
|
|
|
|
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
|
|
return Redirect(returnUrl);
|
|
|
|
return RedirectToAction("Index", "Admin");
|
|
}
|
|
|
|
ViewBag.Error = "Invalid username or password.";
|
|
ViewBag.ReturnUrl = returnUrl;
|
|
return View();
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<IActionResult> Logout()
|
|
{
|
|
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
|
|
return RedirectToAction("Login");
|
|
}
|
|
}
|