• 微博的三方登录


    微博三方的一个整体思路

    微博配置

      1、先搜索微博开放平台,
      2、上方栏有个微链接,将鼠标放上去会展示出一个网站接入WEB,
      3、点开网站接入,点击立即接入
    


    4、点进去以后申请你接下来需要的应用,应用分类就用网页应用就好。

    5、保存一下App Key和App Secret
    6、点开下面的高级信息设置你的授权回调页和取消授权回调页。(这里解释一下授权回调页,它就是你跳到微博授权页面,授权完跳到的页面)

    微博文档

      1、我们一开始点击的微链接右边有个文档点击进去,往下翻找到“OAuth2.0授权认证”,点击进去。   (“OAuth2.0授权认证”,用来获取code码)
      2、进去“OAuth2.0授权认证”以后,往下翻找到接口文档, 先点开“OAuth2/authorize”,这是用来获取code码。点开里面有详细的授权的地址、要携带的参数和返回的参数。
      3、然后我们退出来在点击“OAuth2.0授权认证”下面的“OAuth2/access_token”,   (“OAuth2/access_token”, 拿code码获取token和微博的uid)
      4、点击进去“OAuth2/access_token”,接下的步骤跟点开“OAuth2.0授权认证”的步骤是一样的
    
    
      我是用的的Django,我在请求方法中用requests再次请求,
            代码:json_data = requests.post(url=url, data=data).json()
    

    下面是我Django的代码,希望对大家有所帮助。
    settings.py:

      WB_AK = 'XXXXX'   # 博客配置的AK
      WB_SK = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 博客配置的SK
      WEIBO_CALL_BACK = "http://127.0.0.1:8080/oauth/callback/"   # 授权以后回调的地址
    

    views.py:

      # 通过授权地址,请求微博返回的code
      class WBURLVoew(APIView):
          def get(self, request):
              url = "https://api.weibo.com/oauth2/authorize?"  # 授权的地址,因为需要携带参数,所以后面带个问号
              weibo_url = url + 'client_id=WB_AK&response_type=code&redirect_uri=http://127.0.1:8080/oauth/callback/'  # 我这个方法比较笨,但是直接写自动拼接,我自动拼接当的时候不知道哪里没有写好细节,路由一直乱码,我就用的手动拼接
        print(weibo_url)
    
        return Response({
            'code': 0,
            'msg': '成功',
            'url': weibo_url
        })
    
      # 通过微博授权的code码去微博换取token值
      class CallbackView(APIView):
        def get(self, request):
              code = request.GET.get('code')
              print(code)
              data = {   # 携带的参数
                  'client_id': WB_AK,
                  'client_secret': WB_SK,
                  'grant_type': 'authorization_code',
                  'code': code,
                  'redirect_uri': WEIBO_CALL_BACK
              }
              url = 'https://api.weibo.com/oauth2/access_token'  #  换取token值得地址
    
              try:
                  json_data = requests.post(url=url, data=data).json()  # 发送post请求,然后转码
                  uid = json_data['uid']  # 获取uid
                  uid_user = oauth.OauthUser.objects.filter(uid=uid)
                  if uid_user:
                      res_data = {
                        'code': 0,
                        'msg': '授权成功',
                        'data': {
                              'type': 0,   # 用来判断是否是第一次登陆,用来做绑定
                              'uid': uid,
                          }
                      }
                      return Response(res_data)
    
                  else:
                      res_data = {
                          'code': 0,
                          'msg': '授权成功',
                          'data': {
                              'type': 1,
                              'uid': uid,
                          }
                      }
                      return Response(res_data)
              except Exception as e:
                  return Response({
                      'msg': '没有code',
                      'code': 4005
                  })
    
      # 如果是第一次登陆做绑定
      class UserView(APIView):
          def post(self, request):
              uid = request.data.get('user')
              username = request.data.get('username')
              password = request.data.get('password')
              print(request.data)
              user_obj = user.User.objects.filter(username=username)
              try:
                  if user_obj:
                      return Response({'msg': '用户名已存在', 'code': 4005})
                  new_password = make_password(password)
                  user_cre = user.User.objects.create(username=username, password=new_password)
                  user_get = user.User.objects.get(username=username)
                  print(user_get.id)
                  oauth_cre = oauth.OauthUser.objects.create(uid=uid, user_id=user_get.id, oauth_type=1)
                  return Response({
                      'msg': '绑定成功',
                      'code': 200
                  })
              except Exception as e:
                  print(e)
                  return Response({'msg': '卡卡', 'code': 4009})
  • 相关阅读:
    高精度计算模板
    P1108 低价购买 [DP][统计方案]
    POJ3349 Snowflake Snow Snowflakes [哈希]
    P1312 Mayan游戏 [深搜][模拟]
    P1378 油滴扩展[深搜]
    P1514 引水入城[搜索,线段覆盖]
    TYVJ1391 走廊泼水节
    【BZOJ1196】公路修建问题
    【BZOJ3624】免费道路
    【BZOJ2429】聪明的猴子
  • 原文地址:https://www.cnblogs.com/kaka007/p/14274577.html
Copyright © 2020-2023  润新知