유저 로그인 정보 저장하는 방법

이 코드를 사용해서 db에 저장하면 유저의 모든 활동 내역이 여기에 저장되어 db에 데이터가 엄청나게 많아집니다… 저는 유저가 로그인을 언제했는지만 기록하고 로그인 이후의 활동은 기록하고 싶지 않은데 코드를 어떻게 고쳐야될까요ㅜㅜ

public class UserActivityFilter : IActionFilter
{
private readonly ApplicationDbContext _context;
private readonly UserManager _userManager;
public UserActivityFilter(ApplicationDbContext context, UserManager userManager)
{
_context = context;
_userManager = userManager;
}

 public void OnActionExecuted(ActionExecutedContext context)
 {

 }

 public void OnActionExecuting(ActionExecutingContext context)
 {
     var userName = context.HttpContext.User.Identity.Name;
     var ipAddress = context.HttpContext.Connection.RemoteIpAddress.ToString();
     Guid? userId = null;

     if (!string.IsNullOrEmpty(userName))
     {
         var user = _context.ApplicationUsers.FirstOrDefault(u => u.Email == userName);
         if (user != null)
         {
             userId = user.Id;
         }

        
             StoreUserActivity(ipAddress, userId);
       
     }
 }

 public void StoreUserActivity(string ipAddress, Guid? userId)
 {
     var userActivity = new UserActivity
     {
         IpAddress = ipAddress,
         UserId = userId
     };

     _context.UserActivities.Add(userActivity);
     _context.SaveChanges();
 }

[Key]
public Guid Id { get; set; }
public string IpAddress { get; set; }
public DateTime ActivityDate { get; set; }
[ForeignKey(“UserId”)]
public virtual ApplicationUser? ApplicationUser { get; set; }
public Guid? UserId { get; set; }

public UserActivity()
{
ActivityDate = DateTime.Now;
}

액션 필터에 넣지 말고

컨트롤러에 넣으세요

로그인 / 로그아웃 인증 관련 라우트가 분리 처리 되어 있다면
미들웨어를 사용해서 파이프라인 구성으로 로그(파일로그, DB로그 등) 처리를 할 수 있습니다.

[Route("[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
    public async Task SignIn()
    public async Task SignOut()
}

// [Auth] 컨트롤러 미들웨어 구성
app.UseWhen(context => context.Request.Path.StartsWithSegments("/Auth"), appBuilder =>
{
    // 해당 미들웨어에서 인증 관련 로깅 처리
    appBuilder.UseMiddleware<......>();
});
1개의 좋아요