我想在Django项目中添加不同身份验证提供者的身份验证,所以我决定使用python社会身份验证。我已经配置了我的设置.py正如官方报告中提到的。Django ModelBackend从不验证用户!你知道吗
你知道吗设置.py地址:
AUTHENTICATION_BACKENDS = (
'social_core.backends.backends.GithubOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR.child('templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
SOCIAL_AUTH_USER_MODEL = 'users.CustomUser'
SOCIAL_AUTH_URL_NAMESPACE = 'social'
SOCIAL_AUTH_GITHUB_KEY = '...'
SOCIAL_AUTH_GITHUB_SECRET = '...'
# don`t want to create users
SOCIAL_AUTH_PIPELINE = (
'social_core.pipeline.social_auth.social_details',
'social_core.pipeline.social_auth.social_uid',
'social_core.pipeline.social_auth.social_user',
'social_core.pipeline.user.get_username',
'social_core.pipeline.social_auth.associate_user',
'social_core.pipeline.social_auth.load_extra_data',
'social_core.pipeline.user.user_details',
)
你知道吗网址.py地址:
urlpatterns = [
...
path('social/', include('social_django.urls', namespace='social')),
...
]
模板:
<a href="{% url "social:begin" "github" %}">Login with GitHub</a>
这是因为social\u core没有将用户名和密码参数放入authenticate方法,ModelBackend总是无法获取用户。传递的参数是后端实例、存储实例和GitHub的响应。好的,所以我决定做我自己的认证后端。你知道吗
class SocialAuth(ModelBackend):
def authenticate(self, request, **kwargs):
backend = kwargs.get('backend')
response = kwargs.get('response')
username = backend.get_user_details(response)['username']
return UserModel.objects.get_by_natural_key(username)
它工作得很好,然后我得到一些错误user.social用户属性,但我想一个问题就太多了。那么,为什么文档中没有提到所有这些步骤,或者我在配置中犯了一些错误呢?你知道吗
版本: python-3.6.8、django-2.2.6、social-auth-app-django-3.1.0、social-auth-core-3.2.0。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐