Question

I write a controller like below:

public class AccountController : Controller
{
    public ActionResult Login(/*---*/)
    {
        GenericIdentity identity = new GenericIdentity("userName");
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "role1", "role2" });
        this.HttpContext.User = principal;
        /*---*/;
    }
}

After login, I can get user name by User.Identity.Name in other controller. But User.IsInRole("role1") always return false.

How can I assign a value to User, I don't want to use Membership...

Was it helpful?

Solution

Hm.

Using membership?

At least the lower level API. You need to assign it a principal in some event (which basically turns into a cookie and is deserialized with every call).

Details are in http://support.microsoft.com/kb/306590

Or also in http://msdn.microsoft.com/en-us/library/aa302399.aspx

OTHER TIPS

You need to persist the user data somewhere so that all subsequent page requests have access to it. Usually you would create an authentication ticket and store it in a cookie. Then for each request you extract the data and create your IPrincipal. This can be done in the Application_AuthenticateRequest method of Global.ascx,

MVC - How to store/assign roles of authenticated users has more information on a simple way to do what you want.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top