django 中 Oauth2 实现第三方登陆

python网站第三方登录,social-auth-app-django模块,

social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块

目前流行的第三方登录都采用了OAuth2协议

安装:

pip install social-auth-app-django

setting 配置:

添加应用,

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'verify.apps.VerifyConfig',
'users.apps.UsersConfig',
'rest_framework',
'corsheaders', 'social_django',
]

2,输入命令migrate来生成第三方登录需要的表

注:如无法迁移 可更改 mysql引擎配置

python manage.py migrate

注意新生成的这五张表!!!

3.配置需要的第三方登录模块,settings.py

先找到这个包的位置。

继续配置

# 身份验证后端
AUTHENTICATION_BACKENDS = [
'users.utils.UsernameMobileAuthBackend', 'social_core.backends.weibo.WeiboOAuth2', #微博
'social_core.backends.qq.QQOAuth2', #qq
'social_core.backends.weixin.WeixinOAuth2',#微信
'django.contrib.auth.backends.ModelBackend' #指定django的modelbackend 类
]

配置url 

urlpatterns = [
path('admin/', admin.site.urls),
#用户认证
url(r'^',include('verify.urls')),
#用户信息注册登录
url(r'^',include('users.urls')),
#第三方登录
url('', include('social_django.urls'))
]

配置这里,当用户登录的时候,如果用户不存在,会自动在用户表创建用户,并且关联用户信息

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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_WEIBO_KEY = ''
SOCIAL_AUTH_WEIBO_SECRET = '' # 登录成功后跳转页面
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

第三方平台中需要配置回调url

# social_django.urls 源码中
urlpatterns = [
# authentication / association
# <backend>是一个变量接收要使用登录模块的名称小写
# 请求URL
url(r'^login/(?P<backend>[^/]+){0}$'.format(extra), views.auth,
name='begin'),
# 回调URL
url(r'^complete/(?P<backend>[^/]+){0}$'.format(extra), views.complete,
name='complete'),
# disconnection
url(r'^disconnect/(?P<backend>[^/]+){0}$'.format(extra), views.disconnect,
name='disconnect'),
url(r'^disconnect/(?P<backend>[^/]+)/(?P<association_id>\d+){0}$'
.format(extra), views.disconnect, name='disconnect_individual'),
]

请求URL构造为:http://域名或者ip/login/使用模块名称小写/

如:http://127.0.0.1:8000/login/weibo/

回调URL构造为:http://域名或者ip/complete/使用模块名称小写/

如:http://127.0.0.1:8000/complete/weibo/

回调URL一般需要设置到开放平台的后台

前台页面可以调用,请求url

最后 登录测试 查看下表中是否增加 用户数据。

social_auth_usersocialauth 数据表

登录成功跳到首页,发现还处于未登录状态,我们需要对源码做修改

social_core/actions.py

原始代码 大约第100行左右 更改

return backend.strategy.redirect(url)

修改为

修改源码适配drf

from rest_framework_jwt.serializers import jwt_encode_handler,jwt_payload_handler
response =  backend.strategy.redirect(url)
payload = jwt_payload_handler(user)
response.set_cookie('username',user.username,max_age=24*3600)
response.set_cookie('user_id',user.id,max_age=24*3600)
response.set_cookie('token',jwt_encode_handler(payload),max_age=24*3600)
return response

现在就登录后就正常了。qq和微信的登录,一样的操作,只要去开放平台注册应用,其它跟微博登录一样设置就可以了。

django 中 Oauth2 实现第三方登陆的更多相关文章

  1. Django使用 django-allauth实现第三方登陆

    Django使用 django-allauth实现第三方登陆 这里我们使用 django-allauth 模块来实现第三方账号验证登录,官方文档如下:https://django-allauth.re ...

  2. 微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法

    今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你 ...

  3. Oauth2.0 QQ&微信&微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

  4. Django之第三方登陆模块

    Django之第三方登陆模块 前期准备 安装 django-allauth pip install django-allauth 注意,django-allauth 需要在 Django1.10以上版 ...

  5. Android 中实现分享和第三方登陆---以新浪微博为例

    第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...

  6. 如何批量的在django中对url进行用户登陆限制

    参考URL: https://blog.csdn.net/hanshengzhao/article/details/79540306?utm_source=blogxgwz0 1,首先定义一个内部有装 ...

  7. 网站添加第三方登陆(PHP版)

    这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,W ...

  8. OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token

    在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...

  9. C#网站实现QQ第三方登陆# C#快速开发教程

    C#网站实现QQ第三方登陆 说起在网站上面可以直接使用QQ登录功能大家并不陌生.但翻其官方提供的SDK包中却没有C#方向的. 但是我们有个牛人叫张善友,做了一个民间SDK.下面我们就是用他所写的SDK ...

随机推荐

  1. OpenSSH配置与基本使用

    SSH访问远程 SSH常见分类: telnet-远程登录协议,23/TCP 明文认证.明文传输(不安全) ssh(Secure SHell)-应用层协议,22/TCP 通讯和认证过程加密.主机认证 用 ...

  2. 2019.01.14 codeforces685B. Kay and Snowflake(树形dp)

    传送门 题意简述:给出一棵树,求每个子树的重心. 首先通过画图可以观察出一个性质,我们从叶子结点向根节点递推重心的话重心的位置是不会下降的. 然后由于一个点的重心要么是自己,要么在重儿子子树内,因此如 ...

  3. 2018.10.26 NOIP训练 数数树(换根dp)

    传送门 换根dpdpdp傻逼题好像不好码啊. 考虑直接把每一个二进制位拆开处理. 先dfsdfsdfs出每个点到1的异或距离. 然后分类讨论一波: 如果一个点如果当前二进制位到根节点异或距离为1,那么 ...

  4. R入门(一)

    简单的算术操作和向量运算 向量赋值:函数c( ),参数可以是一个或多个数,也可以是向量 赋值符号‘<-’ 向量运算:exp(),log(),sin(),tan(),sqrt(),max(),mi ...

  5. Java获取文件后缀名

    int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (licenceImg.getOriginalF ...

  6. SVN被锁定的几种解决方法

    用SVN经常出现被锁定而无法提交的问题,选择解锁又提示没有文件被锁定,很是头疼.这里整理了一下SVN被锁定的几种解决方法: 1.出现这个问题后使用“清理”即"Clean up"功能 ...

  7. Angularjs的directive封装ztree

    一般我们做web开发都会用到树,恰好ztree为我们提供了多种风格的树插件. 接下来就看看怎么用Angularjs的directive封装ztree <!DOCTYPE html> < ...

  8. SDIBT 2345 (3.2.1 Factorials 阶乘)

    Description N的阶乘写作N!表示小于等于N的所有正整数的乘积.阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了.你的任务是找到阶乘最后面的非零位.举个例 ...

  9. XML xmlns

    xmlns xml namespaces 参考 http://www.w3school.com.cn/tags/tag_prop_xmlns.asp http://www.w3school.com.c ...

  10. c 语言申明头文件和实现分开简单例子

    很多时候,看到很多c函数的声明和实现是分开的.声明放在头文件,实现却放在另一个文件,最后函数被其他文件调用. 下面以简单例子说明. 一.声明部分 /* test.h */ #include <s ...