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.
DefaultAuthenticationTypes
is part of Identity framework and found inMicrosoft.AspNet.Identity
namespace.To use it, add a
using
to the top of the fileor call it directly
The second issue was already dealt with in another one of your questions here
For the first, it is just a constant string
If you do not want to install packages the quickest ( and not very orthodox ) solution is
you can see definition here