The controller’s User
is accessed through the HttpContext
of the controller. The latter is stored within the ControllerContext
.
The easiest way to set the user is by assigning a different HttpContext with a constructed user. We can use DefaultHttpContext
for this purpose, that way we don’t have to mock everything. Then we just use that HttpContext within a controller context and pass that to the controller instance:
var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, "example name"),
new Claim(ClaimTypes.NameIdentifier, "1"),
new Claim("custom-claim", "example claim value"),
}, "mock"));
var controller = new SomeController(dependencies…);
controller.ControllerContext = new ControllerContext()
{
HttpContext = new DefaultHttpContext() { User = user }
};
When creating your own ClaimsIdentity
, make sure to pass an explicit authenticationType
to the constructor. This makes sure that IsAuthenticated
will work correctly (in case you use that in your code to determine whether a user is authenticated).