Add sso_id field
This commit is contained in:
parent
b87881136c
commit
e2ce704a40
|
|
@ -3,17 +3,20 @@ from django.contrib.auth.models import AbstractUser
|
||||||
|
|
||||||
|
|
||||||
class UserManager(BaseUserManager):
|
class UserManager(BaseUserManager):
|
||||||
def create_or_update_by_email(
|
def create_or_update_by_email(self, user_dict: dict) -> tuple[AbstractUser, bool]:
|
||||||
self, email: str, first_name: str, last_name: str, username: str
|
|
||||||
) -> tuple[AbstractUser, bool]:
|
|
||||||
# create or sync user with OpenID Data
|
# create or sync user with OpenID Data
|
||||||
user, created = self.model.objects.get_or_create(
|
user, created = self.model.objects.get_or_create(sso_id=user_dict['oid'], defaults={
|
||||||
email=email,
|
"email": user_dict["email"],
|
||||||
defaults={
|
"username": user_dict["email"],
|
||||||
"first_name": first_name,
|
"first_name": user_dict['first_name'],
|
||||||
"last_name": last_name,
|
"last_name": user_dict['last_name'],
|
||||||
"username": username,
|
})
|
||||||
},
|
|
||||||
)
|
if not created:
|
||||||
|
user.email = user_dict["email"]
|
||||||
|
user.username = user_dict["email"]
|
||||||
|
user.first_name = user_dict['first_name']
|
||||||
|
user.last_name = user_dict['last_name']
|
||||||
|
user.save()
|
||||||
|
|
||||||
return user, created
|
return user, created
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,8 @@ from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
("core", "0003_create_users"),
|
("core", "0002_user_model"),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
|
@ -17,7 +17,7 @@ def create_users(apps, schema_editor):
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
dependencies = [
|
dependencies = [
|
||||||
("core", "0002_user_model"),
|
("core", "0004_user_sso_id"),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
|
@ -15,6 +15,7 @@ class User(AbstractUser):
|
||||||
# objects = UserManager()
|
# objects = UserManager()
|
||||||
avatar_url = models.CharField(max_length=254, blank=True, default="")
|
avatar_url = models.CharField(max_length=254, blank=True, default="")
|
||||||
email = models.EmailField("email address", unique=True)
|
email = models.EmailField("email address", unique=True)
|
||||||
|
sso_id = models.UUIDField('SSO subscriber ID', unique=True, null=True, blank=True, default=None)
|
||||||
|
|
||||||
objects = UserManager()
|
objects = UserManager()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import json
|
||||||
|
|
||||||
import structlog as structlog
|
import structlog as structlog
|
||||||
from authlib.integrations.base_client import OAuthError
|
from authlib.integrations.base_client import OAuthError
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
@ -28,6 +30,7 @@ def authorize(request):
|
||||||
request
|
request
|
||||||
)
|
)
|
||||||
deocded_token = decode_jwt(token["id_token"])
|
deocded_token = decode_jwt(token["id_token"])
|
||||||
|
return HttpResponse(json.dumps(deocded_token))
|
||||||
except OAuthError as e:
|
except OAuthError as e:
|
||||||
logger.error(f"OAuth error: {e}")
|
logger.error(f"OAuth error: {e}")
|
||||||
if not settings.DEBUG:
|
if not settings.DEBUG:
|
||||||
|
|
@ -54,4 +57,5 @@ def _user_data_from_token_data(token: dict) -> dict:
|
||||||
"last_name": token.get("family_name", ""),
|
"last_name": token.get("family_name", ""),
|
||||||
"username": token.get("preferred_username", first_email),
|
"username": token.get("preferred_username", first_email),
|
||||||
"email": first_email,
|
"email": first_email,
|
||||||
|
"sub": token.get("sub")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue