Reputation: 67
I try to custom login Django2.1 with Mysql,and I got this error: Field 'id' doesn't have a default value.But I had set ID in Aliuser is 'auto_increment' and 'not null':
Where am I wrong?By the way, it is OK with sqlite3.So weird.
This is my 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
Here is my 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
And this is my views.py,i found it may wrong at "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
Upvotes: 0
Views: 74