using System.Security.Claims; using LaneFlowReport.Auth; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Mvc; namespace LaneFlowReport.Controllers { public class LoginController: Controller { private readonly ParkingAuthProvider _parkingAuthProvider; public LoginController(ParkingAuthProvider parkingAuthProvider) { _parkingAuthProvider = parkingAuthProvider; } [HttpGet] public async Task LoginCallback(string mode, string providerKey) { var accessCode = $"{mode};{providerKey}"; var result = await _parkingAuthProvider.GetUserInfo(accessCode); var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, result.UserName), new Claim(ClaimTypes.Role, "Report"), }, "Cookies")); var authProperties = new AuthenticationProperties { IsPersistent = true }; await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsPrincipal), authProperties); HttpContext.User = claimsPrincipal; ViewBag.Status = "authing..."; ViewBag.RedirectUrl = Url.Action("Index", "Report", null, HttpContext.Request.Scheme); return View(); } } }