我想检查用户是否通过社交认证或使用django默认身份验证登录。
类似于
如果用户.social_auth = true?
类似于
如果用户.social_auth = true?
经过一些研究,我想到了这个解决方案,可以确保用户是否使用任何社交提供程序或仅使用默认的Django身份验证进行身份验证。请在此处查看更多信息..
{% if user.is_authenticated and not backends.associated %}
#Do or show something if user is not authenticated with social provider but default auth
{% elif user.is_authenticated and backends.associated %}
#Do or show something if user is authenticated with social provider
{% else %}
#Do or show something if none of both
{% endif %}
我在搜索相关信息,解决方法是user.social_auth.exists(), 如果用户存在于数据库中,则返回True,否则返回false。
来自Python:
user.social_auth.exists()
如果用户是社交用户,将返回True
,否则返回False
。
从模板中:
{% if not backends.associated %}
<code if user is NOT social>
{% else %}
<code if user is social>
{% endif %}
backends
上下文变量将自动设置在Django模板中。from social_auth.models import UserSocialAuth
try:
UserSocialAuth.objects.get(user_id=user.id)
except UserSocialAuth.DoesNotExist:
print "user is logged in using the django default authentication"
else:
print "user is logged in via social authentication"
目前,django-social-auth已被弃用。您可以使用python-social-auth代替。
在这种情况下,您应该使用:
user.social_auth.filter(provider='BACKEND_NAME')
if user.is_authenticated:
if user.social_auth.filter(provider='google-oauth2'):
print 'user is using Google Account!'
else:
print 'user is using Django default authentication or another social provider'
我也遇到了与python-social-auth相同的问题,无法识别社交登录用户。我需要在导航栏中指定一个单独的标签页,让他们完成个人资料页面的编辑。当然,如果用户通过社交认证进行了登录,那么他\她在数据库中没有设置密码。因此,我使用has_usable_password()
方法(django.contrib.auth)来解决这个问题。例如:
{% if user.has_usable_password %}
<a class="dropdown-item" href="{% url 'password_change' %}">Change password</a>
{% elif not user.has_usable_password %}
<a class="dropdown-item" href="{% url 'set_pass' %}">Set password</a>
您可以从UserSocialAuth应用程序中按如下方式查询所有使用社交认证的用户:
from social_django.models import UserSocialAuth
if user in [u.user for u in UserSocialAuth.objects.all()]:
#dosomething