zoukankan      html  css  js  c++  java
  • 05.微博回调接口

    微博回调接口

    1oauth/urls.py中添加路由

    urlpatterns = [
        path('weibo/callback/', views.OauthWeiboCallBack.as_view()),
    ]
    

    2oauth/views.py中添加视图函数

    import requests
    from .models import OauthUser
    from rest_framework_jwt.serializers import jwt_payload_headler, jwt_encode_handler
    from user.utils import jwt_response_payload_handler
    
    
    # 通过vue前端传入的code,微博身份验证
    class OauthWeiboCallback(APIView):
        # 自定义权限类
        permission_classes = (AllowAny, )
        
        def post(self, request):
            code = request.data.get('code')
            data = {
                'client_id': '888888888',
                'client_secret': 'xxxxxxxxxxxxxxxxxxx',
                'code': code,
                'redirct_uri': 'http://127.0.0.1:8888/oauth/callback/',
            }
            url = 'https://api.weibo.com/oauth2/access_token'
            data = requests.post(url=url, data=data).json()  # 拿取请求的返回结果
            weibo_uid = data.get('uid')  # 获取到微博uid
            access_token = data.get('access_token')  # 获取微博token
            
            # 2.根据uid,查询绑定情况
            try:
                oauth_user = OauthUser.objects.get(uid=weibo_uid, oauth_type="1")
            except Exception as e:
                oauth_user = None
            
            # 返回动作,登录成功/需要绑定用户type 0 登录成功, type 1授权成功,需要绑定
            if oauth_user:
                # 如果已经绑定,直接登录成功,返回token
                user = oauth_user.user
                payload = jwt_payload_handler(user)
                token = jwt_encode_handler(payload)
                # jwt_response_payload_handler为user模块定义的jwt返回的信息
                data = jwt_response_payload_handler(token, user)
                data['type'] = "0"  # 指定为登录成功
                
                return Response({"code": 0, "msg": "登录成功", "data": data})
            else:
                # 如果没绑定,返回标志,让前端跳转到绑定页面
                return Response({"code": 0, "msg": "授权成功", "data": {"type": "1", "uid": weibo_uid}})
    

    3.oauth/models.py中添加用户绑定模型

    # 把三方的用户信息,和本地的用户信息进行绑定
    class OauthUser(models.Model):
        OAUTHTYPE = (
        	('1', 'weibo'),
            ('2', 'weixin'),
            ('3', 'QQ')
        )
        uid = models.CharField('三方用户的id', max_length=64)  # 三方用户id
        user = models.ForeignKey('user.User', ondelete=models.CASCADE)  # 关联user表外键
        oauth_type = models.CharField('认证类型', max_length=10, choices=OAUTHTYPE)  # 枚举类型使用的那个三方
    

    4.进行数据库迁移

    python manage.py makemigrations

    python manage.py migrate

  • 相关阅读:
    短信编码总结
    在Linux下用C语言实现短信收发
    sshd_config配置详解
    SSH的通讯和认证
    linux安装tacacs+服务器
    Tacacs+认证详细调研
    伪分布配置完成启动jobtracker和tasktracker没有启动
    Hadoop学习记录(7)|Eclipse远程调试Hadoop
    Hadoop学习记录(6)|Eclipse安装Hadoop 插件
    Hadoop学习记录(5)|集群搭建|节点动态添加删除
  • 原文地址:https://www.cnblogs.com/hr20-04-19/p/13793696.html
Copyright © 2011-2022 走看看