django博客开发:使用django-allauth实现第三方账号登录

打算自己开发一个博客的评论,在此之前决定先做好博客的用户登录、注册系统,使其支持第三方登录。django-allauth,根据其官方文档(这里:https://django-allauth.readthedocs.io/en/latest/index.html),同时支持本地和第三方账号(Github,百度、微博、微信等等。。),集成了邮箱验证、密码修改、本地账号关联(多个)第三方账号等各种功能,果然是好到没朋友。。

开发环境:python 3.4、django 1.10

准备工作:

安装

pip install django-allauth

project/settings.py设置

INSTALLED_APPS = [# 必须安装的app
       'django.contrib.auth', 
       'django.contrib.sites', 'allauth',
       'allauth.account',   
       'allauth.socialaccount',
      # 下面是第三方账号相关的,比如我选了weibo和github 
      'allauth.socialaccount.providers.weibo', 
      'allauth.socialaccount.providers.github',
]
 # django-allauth相关设置
AUTHENTICATION_BACKENDS = (
      # django admin所使用的用户登录与django-allauth无关 
      'django.contrib.auth.backends.ModelBackend',
      # `allauth` specific authentication methods, such as login by e-mail 
      'allauth.account.auth_backends.AuthenticationBackend',
)
# 前面我们app里添加了django.contrib.sites,需要设置
SITE_IDSITE_ID = 1
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_EMAIL_REQUIRED = True

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如下设置:

# SMTP服务器,我使用的是sendclound的服务
EMAIL_HOST = 'smtp.sendcloud.net'
EMAIL_HOST_USER = '用户名'
EMAIL_HOST_PASSWORD = '对应的API key或者密码
'EMAIL_PORT = 25
# 是否使用了SSL 或者TLS
EMAIL_USE_SSL = True
EMAIL_USE_TLS = True
# 默认发件人,不设置的话django默认使用的webmaster@localhost
DEFAULT_FROM_EMAIL = 'Aaron-Zhao <noreply@aaron-zhao.com>'

完成以上设置后,注册账号是我们就可以收到邮件了,关于邮件的其他详细设置,请参照django的官方文档

allauth默认的设置,当用户登录时会重定向到 /accounts/profile,这个页面allauth没有做,因为报错page not found,这个页面需要我们自己完成(请戳:django博客开发:添加用户资料页面和头像上传功能)。与此相关的参数是LOGIN_REDIRECT_URL

在project/settings.py设置 **LOGIN_REDIRECT_URL = '/' **,这样用户登录后的页面就会跳转到首页,而不是用户profile页面。

下面我们去测试一下第三方账号登录,这里以github为例
Github OAuth注册页面:https://github.com/settings/applications/new
要注意将回调地址callback URL设置为 http://127.0.0.1:8000/accounts/github/login/callback/完成注册后 我们会获得一个Cliend ID 和 Client Secret,后面我们会用到

先进入admin后台,会发现增加了social accounts和站点



点开站点管理,将example.com改为我们博客的域名,在开发环境下,我们用127.0.0.1:8000


点击SOCIAL ACCOUNTS下的Social application,增加一个application,如下图所示

provider选Github,这里的provider就是我们在INSTALLED_APP里增加的socialaccount.provider,client id 和secret key 我们在github注册应用里获得了,将sites加入到右边 选中的sites



完成以上设置后,注销,然后回到登录页面,选中github登录,授权应用即可,成功登录后,邮箱里也会收到一份激活邮件,这是因为django-allauth会自动为我们添加一个本地账号,根据你的social account用户名和email。

其他相关设置

project/settings.py

ACCOUNT_EMAIL_VERIFICATION = 'optional' / 'mandatory' / 'none' 默认值是'optional',当其等于'mandatory’时,在email未验证之前,本地注册的用户无法登陆。'optional' 和 'none' 则不要求必须验证邮箱,两者区别是'optional' 依然会发送验证邮件,而'none' 则不会

SOCIALACCOUNT_EMAIL_VERIFICATION = 'optional' / 'mandatory' / 'none'与ACCOUNT_EMAIL_VERIFICATION 同理,作用于第三方账号的注册,默认值等于前者,

LOGIN_URL = '/accounts/login' 当用户验证邮件里的验证链接后,如果当前没有登录的用户,则会指向LOGIN_URL

原文链接:http://www.aaron-zhao.com/post/4/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容