我已经读过认证后端需要实现方法get_user(user_id)
和authenticate(request, **credentials)
。现在,user_id
中的get_user(user_id)
必须根据文档成为用户模型的主键,并且该方法必须返回与user_id
对应的用户对象。
我的问题是,user_id
论证来自何处?是用户名/电子邮件/用户在验证时输入的内容吗?如果是这样,为什么它必须是主键?为什么我无法以get_user()
方法内部以任何我认为合适的方式找到目标用户?
答案 0 :(得分:2)
对于默认用户模型,主键为AutoField
,并且不会是您用于登录的用户名/电子邮件。这些登录凭据将传递给authenticate
,而不是get_user
。
当您登录时,Django会将用户的主键存储在会话中。对于每个请求,身份验证中间件使用此主键调用get_user()
,并将request.user
设置为登录用户。