今天的实作内容主要根据网路资源进行。
Django并没有提供官方的社群登入整合模组,在第三方套件上,django-allauth和python social auth是两个最常被使用的套件,这两种套件都支援了50种以上的社群登入,能符合绝大部分使用者的需求。因在网路上比较容易找到前者的教材,故今天将使用django-auth这个套件。
执行流程如下:
pip install django-allauth
INSTALLED_APPS = [
'django.contrib.sites',
# 3rd party
'allauth',
'allauth.account',
'allauth.socialaccount',
# social provider
'allauth.socialaccount.providers.google',
]
django.contrib.sites:为allauth官方文件要求安装。
'allauth', 'allauth.account', 'allauth.socialaccount':allauth的核心模组
'allauth.socialaccount.providers.google':依欲使用的社群软件添加provider
# social_app/settings.py
AUTHENTICATION_BACKENDS = (
"allauth.account.auth_backends.AuthenticationBackend",
)
SITE_ID = 1
ACCOUNT_EMAIL_VERIFICATION = "none"
ACCOUNT_LOGOUT_ON_GET = True
# Redirect to home URL after login (Default redirects to /accounts/profile/)
LOGIN_REDIRECT_URL = '/'
select * from database.django_site
AUTHENTICATION_BACKENDS:背端验证机制,这边使用allauth做身分认证
ACCOUNT_EMAIL_VERIFICATION:是否需验证email
ACCOUNT_LOGOUT_ON_GET:是否可使用GET Request进行登出 (透过登出按钮送出GET,则可以省略登出页面)
urlpatterns += [
path('accounts/', include('allauth.urls')),
]
#urlpatterns += [
# path('accounts/', include('django.contrib.auth.urls')),
#]
加入allauth.urls,昨天练习使用的django.contrib.auth.urls可以先注解掉。
python manage.py makemigrations
python manage.py migrate
想要使用社群登入,须至该社群软件取得client id和secret使用。 (具体流程网路上有很多教学,就不另外说明)
启动网站,登入管理员网站 (http://127.0.0.1:8000/admin/),新增Social Application。
因为现在身份验证已改用allauth套件进行,配合allauth.urls设定,需更新基础样板中左侧sidebar的登入与登出连结。
{% if user.is_authenticated %}
<li>User: {{ user.first_name }} {{ user.last_name }}</li>
<li><a href="{% url 'account_logout' %}">Logout</a></li>
{% else %}
<li><a href="{% url 'account_login' %}">Login</a></li>
{% endif %}
完成以上动作後,点了登入或登出,会连结至allauth提供的预设画面。
如有画面客制化需求,可至python安装套件的位置,将allauth底下的整个templates资料夹(Lib\site-packages\allauth\templates) 复制到专案资料夹下,再修改样板即可。
>>: [Day 20] SQL in / between / like
我们之前在 HTML 篇章有介绍 DOM,是 Document Object Model 的缩写!...
今天开始要讲分散式系统的一些概念罗。 影片在此: Day04_关於分散式系统的一些概念 (一) ...
前言 fetch 是 JavaScript ES6 新增的用来执行 Ajax 行为的方法,相比旧版的...
鬼故事 - 这不是後门这是工程模式! Credit: sandserif 故事开始 故事回到小弯的公...
假设目前有阵列 $fruits = [ ['id'=>0,'fruit'=>'apple...