用户登录、注册系统,使其支持第三方登录。django-allauth,根据其官方文档(这里:https://django-allauth.readthedocs.io/en/latest/index.html),同时支持本地和第三方账号(Github,百度、微博、微信等等),集成了邮箱验证、密码修改、本地账号关联(多个)第三方账号等各种功能。
安装
pip install django-allauth
project/settings.py设置
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
的作用是当用户登录时,既可以使用用户名也可以使用email, 其他可选的值是 "username"、"email" ,ACCOUNT_EMAIL_REQUIRED = True
要求用户注册时必须填写email,默认False,email是选填的。
**project/urls.py **里include allauth的urls
urlpatterns = [ url(r'^accounts/', include('allauth.urls')),]
设置好后,我们就可以用'accounts/login' 访问登录页面, 'accounts/logout' 注销, 其他的可以去 allauth/account/urls.py查看。
以上基本设置后,需要同步数据库 python manage.py migrate runserver
, 访问登录页面,allauth提供的模板非常简陋, 是这样的
我们可以使用自己制作的模板,在project/templates/account下创建login.html即可override allauth自带的模板,allauth自带的模板放在allauth/templates/account下, 我们只需要在项目templates/account下创建相同名字的html即可覆盖。
测试
下面我们去注册页面test一下,先注册一个本地账号
填写完注册信息后,却出现这样一个错误
出现此错误的原因,官方文档也有说明,这是因为注册账号后,系统会自动发一封邮件来激活账号,但是我们还有发送邮件相关的设置。
django默认使用SMTP发送邮件,在project/settings.py如下设置:
使用
python manage.py migrate
完成以上设置后,注册账号是我们就可以收到邮件了,关于邮件的其他详细设置,请参照django的官方文档
allauth默认的设置,当用户登录时会重定向到 /accounts/profile,这个页面allauth没有做,因为报错page not found,这个页面需要我们自己完成(请戳:django博客开发:添加用户资料页面和头像上传功能)。与此相关的参数是LOGIN_REDIRECT_URL
在project/settings.py设置 **LOGIN_REDIRECT_URL = '/' **,这样用户登录后的页面就会跳转到首页,而不是用户profile页面。
下面我们去测试一下第三方账号登录,这里以baidu为例,
要注意将回调地址callback URL设置为 http://127.0.0.1:8000/accounts/baidu/login/callback/,完成注册后 我们会获得一个Cliend ID 和 Client Secret,后面我们会用到
先进入admin后台,会发现增加了social accounts和站点
点开站点管理,将example.com改为我们博客的域名,在开发环境下,我们用127.0.0.1:8000
点击SOCIAL ACCOUNTS下的Social application,增加一个application,如下图所示
provider选Baidu,这里的provider就是我们在INSTALLED_APP里增加的socialaccount.provider,client id 和secret key 我们在github注册应用里获得了,将sites加入到右边 选中的sites
关于 Client id 和 Secret key 内容需要我们到授权的第三方账号网站开发者创建应用后拿到 对应的 id 和 key,这里以百度为例,登录百度开发者中心,创建应用后我们便拿到相应的 API Key(Client id)和 Secret Key 。https://developer.baidu.com/
将 API Key 和 Secret Key 填入 Django 后台的 Social applications 中。
添加授权回调页地址 http://your domain/accounts/baidu/login/callback/
完成以上设置后,注销,然后回到登录页面,选中baidu登录,授权应用即可,成功登录后,邮箱里也会收到一份激活邮件,这是因为django-allauth会自动为我们添加一个本地账号,根据你的social account用户名和email。