django如何记录登录事件?
开发REST API首选为Python/Django的Django REST Framework(DRF),DRF提供多种认证机制:
- Basic Authentication
- Token Authentication
- Session Authentication
Client-Server模式下常用的为token-based authentication
了解详情
Json Web Token(JWT) Authentication是最近兴起的token-based Authentication新标准,JWT不需要在数据库中存储token,了解详情
django-rest-framework-jwt又是在django中实现jwt的非常方便的插件。
了解详情
但是,当需要记录login event的时候,jwt本身实现不了,最好的方法是结合Signals来做。
为什么jwt本身实现不了呢?
- 需要记录的login event为登录成功和登录失败;
- 登录成功的signal为
user_logged_in,登录失败的signal为user_login_fail; user_loggined_in由django.contrib.auth的login()负责;user_login_fail由django.contrib.auth的authenticate()负责;- DRF只调用
authentication()函数,因此登录成功的信号无法发出。
所以,需要主动发user_logged_in信号
原因讲清楚了,详细解决方案参照via