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