三方登录---新浪微博登录
OAuth2.0授权认证
oauth2.0是什么?
OAuth(开放授权)是⼀个开放标准,允许⽤户让第三⽅应⽤访问该⽤户在某⼀⽹站上存储的私密的
资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和密码提供给第三⽅应⽤。
授权码授权模式(老祖宗)
Oauth2.0的四种授权模式?
https://www.cnblogs.com/Innocent-of-Dabber/p/11009811.html
隐式授权模式(Implicit Grant)
授权码授权模式(Authorization code Grant)
密码模式(Resource Owner Password Credentials Grant)
客户端凭证模式(Client Credentials Grant)
####
微博三方登陆
微博登陆流程图
接口 | 说明 |
---|---|
OAuth2/authorize | 请求用户授权Token |
OAuth2/access_token | 获取授权过的Access Token, UID |
- 在setting.py中配置
WEIBO_APP_ID = '1922536412'
WEIBO_SECRET_KEY = 'ae9fc21b9c9ebca7db0613f4c9faf7df'
- 在utils/baseview中导入
- #utils/Baseview.py
# 微博登录
from rest_framework_jwt.settings import api_settingsdef create_token(user):# 生成jwt_token, user对象,查询结果jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLERjwt_encode_handler = api_settings.JWT_ENCODE_HANDLERpayload = jwt_payload_handler(user)token = jwt_encode_handler(payload)return token
- 创建一个oauthapp应用
- 创建oauthapp/model.py中创建表
from django.db import models
from userapp.models import User###### oauthapp/models.py 创建三方登陆用户关联表# Create your models here.
class OauthUser(models.Model):OAUTHTYPE = (('1', 'weibo'),('2', 'weixin'),)uid = models.CharField('三方用户id', max_length=64)user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)oauth_type = models.CharField('认证类型', max_length=10, choices=OAUTHTYPE)
2. #oauthapp/view.py
from urllib.parse import urlencode
import requests
from django.contrib.auth.hashers import make_password
from rest_framework.views import APIView
from rest_framework.response import Response
from oauthapp.models import *
from syl.settings import WEIBO_APP_ID, WEIBO_SECRET_KEY
from userapp.models import User
from utils.BaseView import create_token# 生成前端页面跳转到微博扫码页面
class WeiBoURL(APIView):def post(self, request):# 拼接一个符合微博规范的URLurl = 'https://api.weibo.com/oauth2/authorize?' # 微博授权的url地址data = {'client_id': WEIBO_APP_ID, # WEIBO_APP_KEY,'response_type': 'code','redirect_uri': 'http://127.0.0.1:8888/oauth/callback/', # VUE的回调,微博后台授权的回调地址}# ********************************weibo_url = url + urlencode(data)# ********************************# https://api.weibo.com/oauth2/authorize?client_id=xxxx&response_type=codereturn Response({'code': '0', 'msg': '成功', 'data': {'url': weibo_url}})# 微博回调接口
class WeiBoCallback(APIView):def post(self, request):code = request.data.get("code")data = {'client_id': WEIBO_APP_ID,'client_secret': WEIBO_SECRET_KEY,'grant_type': 'authorization_code','code': code,'redirect_uri': 'http://127.0.0.1:8888/oauth/callback/',}url = "https://api.weibo.com/oauth2/access_token"# *******************************************************# 需要用一个http请求去请求微博准备的信息-----requestsjson_weibo_data = requests.post(url=url, data=data).json()# *******************************************************print(json_weibo_data)# 提取其中有用的信息UIDuid = json_weibo_data.get("uid")# 判断是否获取到UIDif uid:try:uid_user = OauthUser.objects.get(uid=uid)res_data = {'code': 0,"msg": "授权成功","data": {"type": "0","uid": uid,"username": uid_user.user.username,"token": create_token(uid_user.user)}}return Response(res_data)except Exception as e:res_data = {'code': 0,"msg": "授权成功","data": {"type": "1","uid": uid,}}return Response(res_data)else:return Response({"code": 999, "msg": "获取微博信息失败"})class WeiBoBindUser(APIView):def post(self, request):oauth_type = 1username = request.data.get("username")password = request.data.get("password")weibo_uid = request.data.get("weibo_uid")if not all([username, password, weibo_uid]):return Response({"code": 4005, "msg": "参数不全"})# 判断username是否存在try:user = User.objects.get(username=username)# 添加外键,绑定用户oauthinfo = OauthUser.objects.create(uid=weibo_uid, oauth_type=oauth_type,user=user)data = {"authenticated": True,"id": user.id,"a": None,"name": user.nick_name,"username": username,"email": user.email,"token": create_token(user),"type": 0}res_data = {"code": 0,"msg": "登陆成功","data": data}return Response(res_data)except Exception as e:# 先创建password = make_password(password)user = User.objects.create(username=username, password=password)# 绑定用户oauthinfo = OauthUser.objects.create(uid=weibo_uid, oauth_type=oauth_type, user=user)data = {"authenticated": True,"id": user.id,"role": None,"name": user.nick_name,"username": username,"email": user.email,"token": create_token(user),"type": 0}res_data = {"code": 0,"msg": "登陆成功","data": data}return Response(res_data)
3. oauthapp/urls.py
#oauthapp/urls.pyfrom django.contrib import admin
from django.urls import path, includefrom oauthapp.views import *urlpatterns = [path('weibo/', WeiBoURL.as_view()), # 测试接口获取新浪微博地址path('weibo/callback/', WeiBoCallback.as_view()), # 微博回调接口path('weibo/binduser/', WeiBoBindUser.as_view()), # 绑定三方登录用户
]
4、create_token()
def create_token(user):# 生成jwt_token, user对象,查询结果jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLERjwt_encode_handler = api_settings.JWT_ENCODE_HANDLERpayload = jwt_payload_handler(user)token = jwt_encode_handler(payload)return token
多方登陆
from django.contrib.auth.backends import ModelBackendclass PPAuth(ModelBackend):def authenticate(self, request, username=None, password=None, **kwargs):user = models.User.objects.get(Q(username=username) | Q(phone=username) | Q(email=username))if user is not None and user.check_password(password):return user
三方登录---新浪微博登录相关推荐
- php rsa2 微博,php新浪通行证登录新浪微博登录模拟登录(浏览器版)2016
由于需要项目需要管理微博平台内容,集成登录微博管理平台功能,所以在抓取网页基础上探索了一下浏览器模拟登录,已经实现登录功能,采用JQuery和php结合的方式实现的,其中需要注意跨域访问问题,代码如下 ...
- php 新浪通行证登录 新浪微博登录 模拟登录 (浏览器版) 2016
由于需要项目需要管理微博平台内容,集成登录微博管理平台功能,所以在抓取网页基础上探索了一下浏览器模拟登录,已经实现登录功能,采用JQuery和php结合的方式实现的,其中需要注意跨域访问问题,还要注意 ...
- Android三方登录之新浪微博登录
移动端需要尽可能的去减少用户的操作,拿登录来说,使用第三方登录一键登录自然在一定程度上优于传统的短信验证码. 那么集成新浪微博的一键登录需要哪些步骤呢? 1.在新浪后台注册应用,拿到关键ID. 2.集 ...
- Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录
文章目录 效果图 实战 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟. 效果图 实战 ...
- 新浪微博登录接口实例
2019独角兽企业重金招聘Python工程师标准>>> 提交的方法: public void getRequestToken() { OAuthBase oAuth = ne ...
- Python爬虫高级之JS渗透登录新浪微博 | 知了独家研究
小伙伴们看到标题可能会想,我能直接自己登陆把登陆后的cookie复制下来加到自定义的请求头里面不香嘛,为什么非要用python模拟登录的过程?如果我们是长期爬取数据,比如每天早上中午和晚上定时爬取新浪 ...
- SpringMVC 整合新浪微博登录 Java SDK
为什么80%的码农都做不了架构师?>>> 现在很多网站都整合了便捷的第三方登录,如QQ登录.新浪微博.搜狐.网易等,为用户提供不少方便和节约时间.我们可以选择使用JS或SDK实 ...
- 新浪微博登录密码加密函数 wsse加密算法说明
// 新浪微博登录密码加密函数 // password 密码明文 // servertime 提交的参数之一 // nonce 提交的参数之一 // encode_password 输出 ...
- scrapy模拟登录新浪微博
hi: all, scrapy搞模拟登录真的很简单哦,以下均是在你安装scrapy成功的前提下哦. 首先,分析新浪微薄的登录流程,使用抓包工具得到下面的图片: 一般来说,登录主要就是对服务器进行pos ...
最新文章
- Android Studio:创建类时,添加作者名和日期
- WindowsPhone7开发简单豆瓣网应用程序之界面设计
- POJ - 3278 Catch That Cow 简单搜索
- java怎么生成字母_java自动生成字母
- jdk1.6的项目可以用1.8吗_摩托车链条的保养项目有哪些?可以用高压水枪清洗吗?...
- 零氪科技与诺华达成战略合作 共同打造数字化医疗创新模式
- fedora下做成liveOS的U盘容量变小问题
- HALCON 20.11:如何处理标定助手品质问题
- Matlab中imadjust函数的用法
- 树——一种数据结构(二)
- C# 自定义类型通过实现IFormattable接口,来输出指定的格式和语言文化的字符串(例:DateTime)...
- 2019最新资料!共7T
- ztree 后台异步加载_Ztree 分批异步加载
- WPF窗体更换背景颜色
- ASTC纹理压缩格式(Adaptive Scalable Texture Compression)
- 美国公立大学计算机排名,【美国大学排名】美国大学计算机专业排名
- 路由跟踪在线Tracert工具说明
- 牙疼不是病疼起来真要命!教你几个止疼小偏方
- 小米3联通电信版解锁(2013062 2013063)刷机包可解账号锁
- php 上传apk包到cdn_零基础搭建自己的博客网站和配置CDN设置wordpress篇