引入

现在在做毕业设计,需要做一个管理系统。系统中的用户部分需要使用学校的用户进行认证。于是采用修改 ModelBackend 来实现。

Backend

以下为 Backend 部分的实现。经一同学建议,”通过外部认证,如果有此用户则返回,无此用户则新建”,觉得这个想法特别好,于是采用。

同时这一部分也可以用于之后第三方登录的用户认证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from django.contrib.auth.models import User
from django.contrib.auth.backends import ModelBackend


def check_username_and_passwd(username, password):
    # your check function
    pass


class ThirdPartBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        if check_username_and_passwd(username, password):
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                user = User(username=username)
                user.set_password(password)
                user.save()
            return user
        return None

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

Setting

编写新的 Backend 后,需要在 setting 中修改 AUTHENTICATION_BACKENDS 使配置生效

your/project/settings.py

1
AUTHENTICATION_BACKENDS = ('authorization.backends.ThirdPartBackend',)