登录时间判断逻辑

63 阅读2分钟

1. 问:本项目如何记录和获取用户的登录时间?

答:
在 web-server 端,用户每次登录时,相关信息会被记录到数据库中。比如在 models/LoginAttemptModel.jscontrollers/admin/LoginAttemptController.js 里,登录成功后会插入一条包含用户ID、登录时间(如 new Date())、IP等信息的记录。前端如 web-admin 的 LoginAttempts.vue 页面可以通过接口(如 /admin/login-attempts)获取这些登录记录并展示。


2. 问:如何判断用户的登录是否在有效期内?

答:
本项目主要通过 JWT 的过期时间(exp 字段)来判断用户登录状态是否有效。后端在生成 JWT 时会设置过期时间,前端每次请求时带上 token,后端通过中间件(如 middleware/AuthMiddleware.js)校验 token 是否过期。如果过期,返回 401,前端可据此判断用户登录已失效并跳转到登录页。


3. 问:如何防止用户频繁登录或暴力破解密码?

答:
项目中实现了登录尝试记录和防暴力破解机制。在 middleware/BruteForceProtection.jsmodels/LoginAttemptModel.js 中,后端会统计某一用户或IP在短时间内的登录失败次数。如果超过阈值(如5次),则暂时禁止该用户或IP继续登录一段时间。这样可以有效防止暴力破解。


4. 问:前端如何根据登录时间或 token 过期自动登出用户?

答:
前端在请求接口时,如果收到 401(未授权)响应,通常说明 token 已过期或无效。此时可以在 src/utils/request.ts 的响应拦截器中捕获 401 错误,自动清除本地 token,并通过路由跳转到登录页(如 router/guard.ts 里实现全局守卫)。这样用户体验更好,也保证了安全性。


5. 问:如何在管理后台查看和分析用户的登录历史和活跃时间?

答:
在 web-admin 的 views/admin/LoginAttempts.vue 页面,可以通过调用后端接口(如 /admin/login-attempts,由 controllers/admin/LoginAttemptController.js 提供)获取所有用户的登录历史数据,包括登录时间、IP、状态等。前端可将这些数据以表格或图表形式展示,便于管理员分析用户活跃度和异常登录行为。