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

    1.微博回调接口

    1.1 oauth/urls.py 中添加路由

    urlpatterns = [
      path('weibo/callback/', views.OauthWeiboCallback.as_view()), #
    /oauth/weibo/callback/
    ]

    1.2 oauth/views.py 中添加试图函数

    http://192.168.56.100:8888/oauth/weibo/callback/

    from .models import OauthUser
    from rest_framework_jwt.serializers import jwt_payload_handler,
    jwt_encode_handler
    from user.utils import jwt_response_payload_handler
    
    
    # 通过vue前端传入的code,微博身份验证
    class OauthWeiboCallback(APIView):
        # 自定义权限类
        permission_classes = (AllowAny,)
    def post(self, request):
        # 接收vue端传过来的code(微博的用户code)
        # 1.使用微博用户code+微博开发者账号信息换取微博的认证access_token
        code = request.data.get('code')
        data = {
            'client_id': '3516473472',
            'client_secret': '7862ee35a0dc6f0345d0464dc34f14fc',
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_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() # 拿取请求的返回结果
        access_token = data.get('uid') # 获取到的微博token
        weibo_uid = data.get('access_token') # 获取到少码用户的id
        
        
        # 2. 根据uid 查询绑定情况
        try:
            oauth_user = OauthUser.objects.get(uid=weibo_uid, oauth_type='1')
        except Exception as e:
            oauth_user = None
        # 返回动作, 登录成功/需要绑定用户 type 0 登录成功, 1, 授权成功, 需要绑定
        if oauth_user:
            # 4. 如果绑定了, 返回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:
            # 5. 如果没绑定, 返回标志, 让前端跳转到绑定页面
            return Response({'code': 0, 'msg': '授权成功', 'data': {'type': '1',
    'uid': weibo_uid}})

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

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

    1.4 迁移数据库

    python manager.py makemigrations

    python manager.py migrate

  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/spbyyy/p/13787787.html
Copyright © 2011-2022 走看看