string role = User.FindFirst(ClaimTypes.Role).Value is returning null??
0
Startup.cs
public void ConfigureServices(IServiceCollection services)
{services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie( options => { options.LoginPath = "/authentication/signin"; options.Events = new CookieAuthenticationEvents() { OnSigningIn = async context => { var principal = context.Principal; if (principal.HasClaim(c => c.Type == ClaimTypes.Email)) { if (principal.Claims.FirstOrDefault(claim => claim.Type ==
ClaimTypes.Email).Value == "******@bookevents.com")
{
var claimsIdentity = principal.Identity as ClaimsIdentity;
claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
}
else
{
var claimsIdentity = principal.Identity as ClaimsIdentity;
claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "User"));} } await Task.CompletedTask; } }; }); services.AddControllersWithViews(); services.AddRazorPages().AddRazorRuntimeCompilation(); }
Authentication controller public async Task Signin(string email, string password) {
var user = userService.Validate(email, password).Data;
if (user != null)
{
var claims = new List<Claim>();
claims.Add(new Claim("email", user.Email));
claims.Add(new Claim(ClaimTypes.Email, user.Email));
claims.Add(new Claim(ClaimTypes.Name, user.FullName));
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await HttpContext.SignInAsync(claimsPrincipal);
return Redirect("/BookEvent/ViewAllUserEvents/");
}
else
{
return RedirectToAction("Signin", new { status = 1 });
}
}
**BookEvent Controller public IActionResult ViewAllUserEvents() {
string role = User.FindFirst(ClaimTypes.Role).Value;
string email = User.FindFirst(ClaimTypes.Email).Value;
IEnumerable<BookEventDTO> enumBook = bookEventsService.GetUserEvents(role, email).Data;
return View(enumBook);
}**
Why i am not getting value from startup.cs when i am putting roles in claims?? my signin is working well.