The name 'DefaultAuthenticationTypes' does

2019-06-18 22:42发布

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.

2条回答
爷的心禁止访问
2楼-- · 2019-06-18 23:24

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

查看更多
姐就是有狂的资本
3楼-- · 2019-06-18 23:35

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

ClaimsIdentity identity = new ClaimsIdentity("ApplicationCookie");

you can see definition here

查看更多
登录 后发表回答