string role = User.FindFirst(ClaimTypes.Role).Value is returning null??

Harshita Rawat 1 Reputation point
2022-10-15T06:12:03.537+00:00

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.

Developer technologies | ASP.NET | ASP.NET Core
Developer technologies | VB
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.