搜索

django auth模块使用jwt进行登录不能更新last_login!

染念染念

今天使用django自带的用户系统,进行jwt,重写了user模型,使用手机登录,于是就想用django自带的登录验证...

哎,一切折腾都在于不熟悉

如果想看如何重写自带的user模型,我下次再写篇文章吧,先挖个坑

好了,重写自带的登录验证,就跟别人不一样,由此我发现了django强迫症一处,按所有教程,django能增加除了用户名之前的登录的前提是字段统一,也就是说...
正常是username字段,post的表单得有username字段,而增加手机登录或者邮箱登录,字段还得是username...这一处十分恶心..
因为我重写了User模型,所以绑定的是手机号码字段,那我又想增加用户名的验证了,于是就有这样的代码

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from user.models import User

class UserBackend(ModelBackend):
    def authenticate(self,username=None, password=None, **kwargs):
        try:
            user = User.objects.get(Q(telephone=username) | Q(username=username))
        except User.DoesNotExist:  # 可以捕获除与程序退出sys.exit()相关之外的所有异常
            return None

        if user.check_password(password):
            return user

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

QQ截图20200816161344.png

调用成功,但真的难受的一逼..

于是我兴高采烈的去尝试,我发现....

只有login函数才能触发用户last_login的刷新,而login又基于session,除了后台我用到了,其他我用了jwt,鬼tm的...刷新用户登录时间

经过一番思考,我终于决定放弃自带验证,还不如自己手动写验证,这样...我还能让字段舒服一些。

我写了这么多,就是以防有人跟我一样走了这条路,浪费更多的时间...

尽管如此,我还是认识了Q的写法...

查看目录

目录

来自 《django auth模块使用jwt进行登录不能更新last_login!》

    评论区



    可能感兴趣