django2.1,使用mysql自定义登录,MySQL:"字段'id'没有默认值"

问题描述

我尝试使用 MysqL 自定义登录 Django2.1,但出现此错误Field 'id' 没有认值。但我已设置Aliuser 中的 ID 是“auto_increment”和“not null”:

enter image description here

我哪里错了?顺便说一句,sqlite3还可以。太奇怪了。

这是我的models.py:

from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.contrib.auth.models import AbstractUser

@python_2_unicode_compatible
class AliUser(AbstractUser):
    userid = models.CharField(max_length=20,default='')  # user Id
    empid = models.CharField(max_length=100,default='')
    sso_token = models.CharField(max_length=36)  # SSO Token
    token_time = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return self.first_name

这是我的 backends.py:

from django.contrib.auth.backends import RemoteUserBackend
from naxxramas.models import AliUser as User

class AliSSOUserBackend(RemoteUserBackend):
    def authenticate(self,request,userId,empId,first_name='',last_name='',email=''):
        if not userId or not empId:  # not my company user
            return None

        user = None

        try:
            user = User.objects.get(empid=empId)
            self.create_unkNown_user = False
        except User.DoesNotExist:
            pass

        if self.create_unkNown_user:
            user,created = User.objects.update_or_create(
                empid=empId,defaults={
                    'username': email.split('@',1)[0],'empid': empId,'userid': userId,'first_name': first_name or last_name or '',# first_name may be null
                    'last_name': last_name or '','email': email,})
            if created:
                user = self.configure_user(user)

        return user if self.user_can_authenticate(user) else None

这是我的 views.py,我发现它可能在“auth_login”中出错:

from django.conf import settings
from django.contrib.auth import authenticate,login as auth_login
from django.http import HttpResponseRedirect,HttpResponseBadRequest

def login(request):
    sso_token = request.GET.get('SSO_TOKEN')
    next = request.GET.get('BACK_URL')

    result = get_user_info_from_sso(sso_token)   # this is a method to get my staff login information
    if not result['hasError']:
        user = json.loads(result['content'])
        user_dict = normalize_user(user)
    else:
        return HttpResponseBadRequest('auth Failed!')

    userId = user_dict.get('id')
    empId = user_dict.get('empId')
    email = user_dict.get('email')
    name = user_dict.get('name')
    realname = user_dict.get('realname')

    if userId is not None:
        user = authenticate(request,userId=userId,empId=empId,first_name=name,last_name=realname,email=email)
        auth_login(request,user)

    user.sso_token = user_dict.get('token')  # update user's token
    user.save()

    response = HttpResponseRedirect(next)
    return response

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)