django自定义配置auth登录功能

django自定义配置auth登录功能

1.在users用户下创建utils.py ,其代码如下

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from  .  import models
from django.contrib import auth  # 导入auth模块
from django.contrib.auth.models import User  # 导入auth_user表对象
from django.contrib.auth.decorators import login_required  # 校验用户是否登陆的装饰器
def get_user_by_account(username):
    """用于验证用户是否存在"""
    try:
        user=models.User.objects.get(Q(username=username) | Q(mobile=username))
    except models.User.DoesNotExist:
        return None
    else:
        return user

class UsernameMobileAuthBackend(ModelBackend):
    """自定义登录功能"""

    def authenticate(self, request, username=None, password=None, **kwargs):
        user=get_user_by_account(username)
        print(user.username,user.id)
        if user is not None and user.check_password(password):
            # auth.login(request,user)
            return user   #如果登录成功返回该用户对象
        else:
            return None #如果登录失败则返回None


def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功返回数据
    """
    return {
        'token': token,
        'id': user.id,
        'username': user.username
    }

2.settings/dev 中配置如下参数

#配置自己写的登录认证
# 配置自定义认证机制
AUTHENTICATION_BACKENDS = [
    'users.utils.UsernameMobileAuthBackend',
]

3.登录认证路由

  • 总路由urls.py配置

    urlpatterns = [
        path('admin/', admin.site.urls),
        #配置xadmin的路由
        path('xadmin/', xadmin.site.urls),
        #配置xadmin上传轮播图
        re_path(r'media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}),
        #将路由转发给home应用
        path(r'home/',include('home.urls')),
        #将路由转发给user应用,用于登录认证
        path(r'users/',include('users.urls')),
        #将路由转发给course这个应用
        path(r'course/',include('course.urls')),
    
    ]
    
  • users 应用路由配置

    from rest_framework_jwt.views import obtain_jwt_token
    urlpatterns = [
        path(r'login/', obtain_jwt_token),
    ]
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值