问题描述
我尝试使用 MysqL 自定义登录 Django2.1,但出现此错误:Field 'id' 没有默认值。但我已设置Aliuser 中的 ID 是“auto_increment”和“not null”:
我哪里错了?顺便说一句,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 (将#修改为@)