微博的三方登录

微博三方的一个整体思路

微博配置

  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})
原文地址:https://www.cnblogs.com/kaka007/p/14274577.html