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

    1.微博回调接口

    1.1oauth.urls.py中添加路由

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

    1.2oauth/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.3oauth.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
    
  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/yimeng123/p/13798789.html
Copyright © 2011-2022 走看看