专栏首页程序员八阿哥年薪20万Python工程师进阶(1):Django-第三方登录框架

年薪20万Python工程师进阶(1):Django-第三方登录框架

第三方登陆

1.安装

pip install social-auth-app-django

2.配置

INSTALLED_APPS=( ... 'social_django', ... )

3.数据生成,直接migrate,因为源码中的 makemigrtasion 生成的数据库迁移文件已经存在了。会生成5张socia表,不用管

./manage.pymigrate

4.配置中添加

下面是源码,google的第三方验证,不需要添加。

AUTHENTICATION_BACKENDS=( 'social_core.backends.open_id.OpenIdAuth', 'social_core.backends.google.GoogleOpenId', 'social_core.backends.google.GoogleOAuth2', 'social_core.backends.google.GoogleOAuth', 'social_core.backends.twitter.TwitterOAuth', 'social_core.backends.yahoo.YahooOpenId', ... 'django.contrib.auth.backends.ModelBackend', )

这里是基于微博,QQ,微信的第三方验证

AUTHENTICATION_BACKENDS = (     #自定义设置jwt验证登录时候,可以匹配手机和密码(jwt认证接口默认匹配密码和账户)     'users.views.CustomBackend',     #第三方认证登录配置,微博、微信、QQ     'social_core.backends.weibo.WeiboOAuth2',     'social_core.backends.qq.QQOAuth2',     'social_core.backends.weixin.WeixinOAuth',     'django.contrib.auth.backends.ModelBackend', )

5.在urls.py中配置URL

urlpatterns = patterns(' ', ... url(' ',include('social_django.urls', namespace='social')) ... )

6.setting.py中配置

7.基础配置完后需要在setting.py中设置appkey和回调网站

源码:

SOCIAL_AUTH_TWITTER_KEY='foobar' SOCIAL_AUTH_TWITTER_SECRET='bazqux'

我的配置:

#第三方登录设置appkey和secret,根据开发平台的不同而不同 SOCIAL_AUTH_WEIBO_KEY = '23xxxxxxx'  #微博 SOCIAL_AUTH_TWITTER_SECRET = '2c60B652xxxxcxxxxxxxxx'  #微博 SOCIAL_AUTH_QQ_KEY = 'foobar'  #QQ SOCIAL_AUTH_QQ_SECRET = 'bazqux'  #QQ SOCIAL_AUTH_WEIXIN_KEY = 'foobar'  #微信 SOCIAL_AUTH_WEIXIN_SECRET = 'bazqux'  #微信

8.成功登陆后跳转页面设置

#第三方登录成功后跳转页面,这里跳转的主页 SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

最后:

    登录跳转后,会自动生成一个用户,和该第三方用户绑定。

    由于项目的不同,不会直接登录,因为第三方框架是将数据存在了session中,而我的项目是用JWT机制保存token来实现登录,所以后续需要修改源码的方法。

1.拷贝源码文件夹(social_core)到extra_apps

2.修改extra_apps/actions.py/def do_complete函数

先导入库

from rest_framework_jwt.serializers import jwt_encode_handler, jwt_payload_handler

然后修改def do_complete函数

###############    修改了这个  ############# # return backend.strategy.redirect(url) response = backend.strategy.redirect(url) #根据username生成token payload = jwt_payload_handler(user) response.set_cookie('name',user.name if user.name else user.username,max_age=24 * 60 * 60)  #一定要设置过期时间 response.set_cookie('token',jwt_encode_handler(payload)) return response

最后完成第三方用户登录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 速成记|安装PaddlePaddle到底分几步?

    和哪个版本的PaddlePaddle可以牵手成功,首先对自己的“英雄”要足够了解,尤其是这三个硬性条件

    用户1386409
  • Github 项目推荐 | 用 Python 实现的大规模线性回归、分类和排名库 —— lightning

    Lightning 稳定版本的预编译二进制文件在主要平台可用,需要用 pip 安装:

    AI研习社
  • AI不思议|说说那些偶尔混淆的概念

    但是产品和运营两队小伙伴一不小心就遇到概念混淆的场景,有些时候是自己记模糊了、有些时候自己没记错、却被别人“拐到沟里“了…

    用户1386409
  • 适用于python3的CTP交易接口

    目前vn.py官方适用的python版本是2.7,有关python3的版本正在开发中,但鉴于最近大家对python3需求的呼声较高,论坛有两个帖子提供了适用于p...

    用Python的交易员
  • Propel: 由Node.js之父创建的JavaScript科学计算库

    Propel 是一个新推出的 JavaScript 科学计算库,它使用图形处理器来支持 JavaScript 中的机器学习和科学计算。

    前朝楚水
  • Knock 子域名扫描工具

    Knock是一款Python编写的工具,通过单词列表来枚举目标域上的子域。扫描DNS区域传输,并尝试绕过通配DNS记录。再最新版本中knockpy支持查询Vir...

    用户1467662
  • 技术流|主流深度学习框架比较

    目前市面上主流深度学习框架近十余种,每种框架各具特色。如何选择合适的深度学习框架?本篇对主流深度学习框架进行综合比较,帮助大家理清思路。

    用户1386409
  • Golang Template 简明笔记

    作者:人世间 链接:https://www.jianshu.com/p/05671bab2357 來源:简书

    李海彬
  • 使用 Go 语言学会 Tensorflow

    Tensorflow 并不是一个专门用于机器学习的库,相反的,它是一个通用的用于图计算的库。它的核心部分是用 C++ 实现的,同时还有其它语言的接口库。Go 语...

    李海彬
  • 2018年3月份GitHub上最热门的Python项目:深度学习占半壁江山

    https://github.com/NVIDIA/FastPhotoStyle Star 5978

    前朝楚水

扫码关注云+社区

领取腾讯云代金券