django用户身份验证没有输入密码

时间:2018-03-23 02:48:23

标签: django python-3.x authentication

我想要一个功能工作流程如下:

1)用户从网页登录(输入用户名/密码),验证成功,然后我们可以从数据库(而不是网页)获取用户密码,我们稍后会使用。

2)用户确认启动我们提供的小型bot服务,一旦用户确认,那么服务将执行并回调 3)由于僵尸服务是另一个独立的应用程序,因此它必须使用用户帐户回调登录操作(auth)并在用户帐户下记录信息。

我的问题是,当我在bot服务应用程序中使用用户的帐户登录时,它失败了,因为密码已被哈希。

有没有办法解决这个问题?

我追踪django源代码,

djanofrom django.contrib import auth

auth.login(request,authenticate)
除非修改源代码,否则似乎无法解决此问题,我的意思是在框架中添加新功能?但显然,这不是最好的主意

任何人都会就此问题提供建议,谢谢

1 个答案:

答案 0 :(得分:1)

您应该编写自定义身份验证后端。

https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#writing-an-authentication-backend

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User

class PasswordlessAuthBackend(ModelBackend):
    def authenticate(self, username=None):
        try:
            return User.objects.get(username=username)
        except User.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

然后将其添加到您的settings.py

AUTHENTICATION_BACKENDS = (
    # ... your other backends
    'yourapp.auth_backend.PasswordlessAuthBackend',
)

之后,您可以使用

登录您的观看次数
user = authenticate(username=user.username)
login(request, user)