我想用django的身份验证执行以下操作:
我认为自定义身份验证后端将是解决方案。
我可以完成我想要的大部分工作,但我想记录进行尝试的用户的IP和REMOTE_HOST。
如何在auth后端访问请求对象?
由于
答案 0 :(得分:10)
身份验证后端可以为authenticate()
方法获取任意数量的自定义参数。例如:
class MyBackend:
def authenticate(self, username=None, password=None, request=None):
# check username, password
if request is not None:
# log values from request object
如果您在自己的视图中调用身份验证,则可以传递请求对象:
from django.contrib.auth import authenticate
def login(request):
# discover username and password
authenticate(username=username, password=password, request=request)
# continue as normal
如果您正在使用django的登录视图(或管理员登录),则您将无法获得额外信息。简而言之,您必须使用自己的自定义登录视图。
此外,在自动锁定帐户时要小心:您允许某人故意锁定您的某个用户帐户(拒绝服务)。有办法解决这个问题。此外,请确保您的错误尝试日志不包含任何尝试的密码。
答案 1 :(得分:0)
在最新版本的Django中,authenticate()接受“请求”作为第一个参数:
请参阅: