模型不保存刷新令牌
Model not saving refresh token
只是试图将刷新令牌从 Google OAuth 2.0 保存到登录的抽象用户配置文件中。 它正确显示刷新令牌和用户。但是,当登录时,用户没有在模型中存储刷新令牌。
pipeline.py:
from .models import Profile
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
print(extra_data["refresh_token"],user)
Profile.objects.get_or_create(
username=user, defaults={"refresh_token": extra_data["refresh_token"]}
)
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Profile(AbstractUser):
refresh_token = models.CharField(max_length=255, default="")
现在显示的时候是空的
calendar.html:
{% block content %}
{{user.refresh_token}}
<h1>Calendar</h1>
<button>+</button>
<ul>
{% for result in results %}
<li>{{result.start.date}}{% if result.end.date %}-{% endif%}{{result.end.date}}: {{result.summary}}</li>
{% endfor %}
</ul>
{% endblock %}
queryset 方法 get_or_create
不会更新模型中的值,它只会在对象不存在时创建一个新对象。如果您尝试更新 existing 对象中的值,您应该使用 get_or_create
returns 的第二个值来确认它已经存在并进行必要的更新.
所以调整应该是这样的:
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
profile, created = Profile.objects.get_or_create(
username=user, defaults={"refresh_token":
extra_data["refresh_token"]}
)
# `created` will be false if the object exists
if not created:
profile.refresh_token = extra_data["refresh_token"]
profile.save()
只是试图将刷新令牌从 Google OAuth 2.0 保存到登录的抽象用户配置文件中。 它正确显示刷新令牌和用户。但是,当登录时,用户没有在模型中存储刷新令牌。
pipeline.py:
from .models import Profile
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
print(extra_data["refresh_token"],user)
Profile.objects.get_or_create(
username=user, defaults={"refresh_token": extra_data["refresh_token"]}
)
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Profile(AbstractUser):
refresh_token = models.CharField(max_length=255, default="")
现在显示的时候是空的
calendar.html:
{% block content %}
{{user.refresh_token}}
<h1>Calendar</h1>
<button>+</button>
<ul>
{% for result in results %}
<li>{{result.start.date}}{% if result.end.date %}-{% endif%}{{result.end.date}}: {{result.summary}}</li>
{% endfor %}
</ul>
{% endblock %}
queryset 方法 get_or_create
不会更新模型中的值,它只会在对象不存在时创建一个新对象。如果您尝试更新 existing 对象中的值,您应该使用 get_or_create
returns 的第二个值来确认它已经存在并进行必要的更新.
所以调整应该是这样的:
def save_token(user,*args,**kwargs):
extra_data = user.social_auth.get(provider="google-oauth2").extra_data
profile, created = Profile.objects.get_or_create(
username=user, defaults={"refresh_token":
extra_data["refresh_token"]}
)
# `created` will be false if the object exists
if not created:
profile.refresh_token = extra_data["refresh_token"]
profile.save()