Search code examples
c#asp.netasp.net-mvcasp.net-mvc-5applicationmanager

The name 'DefaultAuthenticationTypes' does not exist in the current context


I'm trying to implement role-based authorization in my web application like following:

[HttpPost]
[ActionName("Login")]
public ActionResult Login(LoginViewModel model)
{
    if (ModelState.IsValid)
    {
        string userName = model.Username;
        string[] userRoles = (string[])Session["UserRoles"];

        ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);

        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userName));

        userRoles.ToList().ForEach((role) => identity.AddClaim(new Claim(ClaimTypes.Role, role)));

        identity.AddClaim(new Claim(ClaimTypes.Name, userName));

        AuthenticationManager.SignIn(identity);

        return RedirectToAction("Success");
    }
    else
    {
        return View("Login",model);
    }
}

I'm getting an error on two lines:

1.ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);

And:

2.AuthenticationManager.SignIn(identity);

The error 1:

the name 'DefaultAuthenticationTypes' does not exist in the current context

And error 2 is:

Authentication manager does not contains definition for SignIn

I was trying to find a solution how to implement this but I couldn't find anything related to the errors.


Solution

  • DefaultAuthenticationTypes is part of Identity framework and found in Microsoft.AspNet.Identity namespace.

    To use it, add a using to the top of the file

    using Microsoft.AspNet.Identity;
    //...other code
    identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
    

    or call it directly

    identity = new ClaimsIdentity(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
    

    The second issue was already dealt with in another one of your questions here