DRF第三方登录,我们将使用第三方包实现!!!

1、首先安装

pip install social-auth-app-django

文档请看 https://python-social-auth.readthedocs.io/en/latest/configuration/django.html

2、在setting文件中
INSTALL_APP中加入

'social_django',

3、生成数据表
由于第三方登录包已经生成好了migration的文件,所以我们只需migrate就好
出现warning不需要在意。记得mysql引擎要使用innerdb。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "",
'USER': '',
'PASSWORD': "",
'HOST': "127.0.0.1",
#第三方登录。。。。不设置migration会出错
'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
}
}

执行migrate之后,数据库会生成新的表用来记录第三方登录

4、setting文件中
设置邮箱和用户名和手机号均可登录

# 设置邮箱和用户名和手机号均可登录
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
#第三方登录配置之微博登录
'social_core.backends.weibo.WeiboOAuth2',
#第三方登录配置之QQ登录
'social_core.backends.qq.QQOAuth2',
#第三方登录配置之微信登录,微信有两种:oauth2 和 oauth2app,我们使用auth2
'social_core.backends.weixin.WeixinOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'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',
],
},
},
]

设置第三方登录的应用的key与secret
需要自己去第三方平台创建应用,获取应用的key与secret

# 第三方登录相关

#微博应用的key与secret
SOCIAL_AUTH_WEIBO_KEY = ''
SOCIAL_AUTH_WEIBO_SECRET = '' #QQ应用的key与secret
SOCIAL_AUTH_QQ_KEY = ''
SOCIAL_AUTH_QQ_SECRET = '' #微信应用的key与secret
SOCIAL_AUTH_WEIXIN_KEY = ''
SOCIAL_AUTH_WEIXIN_SECRET = '' #配置用户授权之后重定向跳转的url
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/index/'

5、url的配置

 # 首页
path('index/', TemplateView.as_view(template_name='index.html'), name='index'),
# 第三方登录
path('', include('social_django.urls', namespace='social'))

配置完成之后可以进行登录,但首页不会显示用户名
drf登录获取的是cookie,所以需要更改social_core的源码使得它可以setcookie
social_core/actions.py:

from rest_framework_jwt.serializers import jwt_encode_handler,jwt_payload_handler

def do_complete(backend, login, user=None, redirect_name='next',
*args, **kwargs):
......
if backend.setting('SANITIZE_REDIRECTS', True):
allowed_hosts = backend.setting('ALLOWED_REDIRECT_HOSTS', []) + \
[backend.strategy.request_host()]
url = sanitize_redirect(allowed_hosts, url) or \
backend.setting('LOGIN_REDIRECT_URL') # 修改源码适配drf
response = backend.strategy.redirect(url)
payload = jwt_payload_handler(user)
response.set_cookie("name", user.name if user.name else user.username, max_age=24 * 3600)
response.set_cookie("token", jwt_encode_handler(payload), max_age=24 * 3600)
return response

原文:https://blog.csdn.net/qq_34374753/article/details/84501264

Django-REST_Framework 第三方登录的更多相关文章

  1. 第四百零四节,python网站第三方登录,social-auth-app-django模块,

    第四百零四节,python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目 ...

  2. OAuth2.0 social_django微博第三方登录

    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方 ...

  3. django项目微博第三方登录

    此处咱们用到的是 social_django,所以要把此应用注册到配置文件中, INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.a ...

  4. Django rest framework集成微博第三方登录

    Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...

  5. django rest_framework vue 实现用户登录

    django rest_framework vue 实现用户登录 后端代码就不介绍了,可以参考  django rest_framework 实现用户登录认证 这里介绍一下前端代码,和前后端的联调过程 ...

  6. django rest_framework 实现用户登录认证

    django rest_framework 实现用户登录认证 1.安装 pip install djangorestframework 2.创建项目及应用 创建过程略 目录结构如图 3.设置setti ...

  7. Django项目中使用qq第三方登录。

    使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...

  8. Django 2.0.4 微博第三方登录

    三方登录逻辑 理解第三方登录的流程: 用户向本地应用商城发起请求,我要用微博进行登录 我们的商城凑一个url让用户跳转到第三方应用的url(微博的登录页面) 用户在该界面点击输入用户名密码之后,点击授 ...

  9. Django rest_framework 实用技巧

    前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...

  10. Django之第三方登陆模块

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

随机推荐

  1. 洛谷 P1084 疫情控制 —— 二分+码力

    题目:https://www.luogu.org/problemnew/show/P1084 5个月前曾经写过一次,某个上学日的深夜,精疲力竭后只有区区10分,从此没管... #include< ...

  2. 多条件查询测试用例设计方法(1)—Pairwise(转)

    在我的工作中,我也遇到类似需求.正交法是一种不错的选择,而在我们实践过程中,我们还用了Pairwise方法,以及另一种方法(如下): 假设查询因子:A,B,C,D,E 1.单独查询:A:B:C:D:E ...

  3. js工作备注

    { field : 'state', title : '事件状态', align: 'center', width : 120, formatter : function(value, row, in ...

  4. js实现页面的全屏与退出

    1.在data里面定义: data(){ return{ isScreen:false, } } //是否显示全屏 fullScreen(event){ this.isScreen = !this.i ...

  5. js获取标签的三种方式

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. Java中的锁机制,你真的了解吗?

    学到锁说明你已经学过多线程了,只有在多线程并发的情况下才会涉及到锁,相信大家用的最多的要数synchronized了,因为这个也是最简单的,直接加在方法上就可以使一个方法同步.那么除了synchron ...

  7. ASP.NET MVC5 之 客户端实现文件的下载

    MVC 实现下载功能主要借助于 File 属性: //下载文件接口 public ActionResult GetTrackTempIsc(ICSModels icsModels) { bool fl ...

  8. 如何使用 Idea 远程调试 Java 代码

    起因 这几天,我做的项目中需要使用第三方的 API,在第三方的 API 回调时,出现各种错误,需要远程调试.之前做远程调试的时候,我只会在代码中输出日志,记录下来做分析处理,但这样做既麻烦又费时,往往 ...

  9. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  10. MVC学习-发送请求

    在HomeControl中添加一个Action,代码如下: public ActionResult Add() { return View(); } 当View()中不写任何参数时,默认会调用同名的视 ...