Каков наилучший способ узнать пользователя, который входит в систему? - PullRequest
0 голосов
/ 15 апреля 2019

Здравствуйте, у меня следующая проблема разработки:

Перед доступом к моему контроллеру у меня есть фильтр для проверки аутентификации и авторизации, поэтому для этого мне нужно знать пользователя.Пока все не будет идеально, но проблема начинается, когда я хочу узнать пользователя, который ведет журнал, чтобы я мог делать больше вещей.Любые идеи?

[AdministratorAuth("DogController")] 
public class DogController : ControllerBase
{    
   [HttpGet]
   public IAction GetDogsOfUser()
   {
       return Ok(dogLogic.GetDogsOfUser());
   }
}
public class LoginAuth : Attribute, IActionFilter
    {
        public static Guid Token { get; private set; }

        public void OnActionExecuted(ActionExecutedContext context)
        {

        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            string headerToken = context.HttpContext.Request.Headers["Authorization"];

            if (headerToken is null) 
            {
                context.Result = new ContentResult()
                {
                    Content = "Token is required",
                };
            } else 
            {
                try 
                {
                    Guid token = Guid.Parse(headerToken);
                    VerifyToken(token, context);
                    Token = token;
                } catch (FormatException) 
                {
                    context.Result = new ContentResult()
                    {
                        Content = "Invalid Token format",
                    };
                }
            }
        }

        private void VerifyToken(Guid token, ActionExecutingContext context)
        {
            using (var sessions = GetSessionLogic(context)) 
            {
                if (!sessions.IsValidToken(token)) 
                {
                    context.Result = new ContentResult()
                    {
                        Content = "Invalid Token",
                    };
                }
            }
        }

        private ISessionLogic GetSessionLogic(ActionExecutingContext context) 
        {
            var typeOfSessionsLogic = typeof(ISessionLogic);
            return context.HttpContext.RequestServices.GetService(typeOfSessionsLogic) as ISessionLogic;
        }
    }
public class AdministratorAuth : LoginAuth
    {
        private readonly string permission;

        public AdministratorAuth(string permission)
        {
            this.permission = permission;
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {

        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            base.OnActionExecuting(context);
            string headerToken = context.HttpContext.Request.Headers["Authorization"];
            Guid token = Guid.Parse(headerToken);

            using (var sessions = GetSessionLogic(context)) 
            {
                if (!sessions.HasLevel(token, permission)) 
                {
                    context.Result = new ContentResult()
                    {
                        Content = "The user hasn't the permission to access " + permission,
                    };   
                }
            }
        }

        private ISessionLogic GetSessionLogic(ActionExecutingContext context) 
        {
            var typeOfSessionsLogic = typeof(ISessionLogic);
            return context.HttpContext.RequestServices.GetService(typeOfSessionsLogic) as ISessionLogic;
        }
    }

Итак, давайте представим, что у меня есть это, если я хочу знать собак пользователя, который входит, как я могу это сделать?

1 Ответ

0 голосов
/ 15 апреля 2019

Вы можете просто использовать Nlog или log4net ,

или

создатьмодель, которая содержит

Logged = DateTime.Now,
LoginHost = Request.Host.ToString(),
LoginIP = Request.HttpContext.Connection.LocalIpAddress.ToString(),
SessionId = Request.HttpContext.Session.Id
...