For my actions that are going to interact with the User's account, I would like to create a "TheUser" object in addition to adding that object to "ViewData["TheUser"]" as soon as any action on my controller is called.
If the User is logged in, it will grab the User's info from the database, if not, "TheUser" object will just be null.
I tried accessing "User.Identity.Name" in the controller constructor, but it isn't created prior to any action being called.
I was looking at custom authorization filters, but those wouldn't allow me to create the "TheUser" object and store it in the ViewData.
This is a brief snippet of what I would like to accomplish:
[Authorize]
public class HomeController : Controller
{
User TheUser;
public HomeController()
{
TheUser = User.Identity.IsAuthenticated ? UserRepository.GetUser(User.Identity.Name) : null;
ViewData["TheUser"] = TheUser;
}
}
I created a custom base Controller class and added a "CurrentUser" property to it.
In the Initialize method, I placed the logic to get the user and then add it to the ViewData and the "CurrentUser" property of the controller.
I had my controllers inherit the custom base Controller class and I was able to reference "CurrentUser" variable anywhere in the controller:
public class CustomControllerClass : Controller
{
public User CurrentUser { get; set; }
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
if (requestContext.HttpContext.User.Identity.IsAuthenticated)
{
string userName = requestContext.HttpContext.User.Identity.Name;
CurrentUser = UserRepository.GetUser(userName);
}
ViewData["CurrentUser"] = CurrentUser;
}
}
I setup my base controller in a similar way using the constuctor method, and I was able to read this User info on the following mannner. Note: I only store the UserId, not the User object, but the point of my code is to show how you can get the required info in the contriuctor method.
public abstract class BaseController : Controller
{
int _UserId = 0;
public int UserId
{
get { return _UserId; }
set { _UserId = value; }
}
public BaseController()
{
var userFromAuthCookie = System.Threading.Thread.CurrentPrincipal;
if (userFromAuthCookie != null && userFromAuthCookie.Identity.IsAuthenticated) // && !String.IsNullOrEmpty(userFromAuthCookie.Identity.Name))
{
busUser userBO = AceFactory.GetUser();
string userNameFromAuthCookie = userFromAuthCookie.Identity.Name;
_UserId = userBO.GetUserIdByUsername(userNameFromAuthCookie);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With