vue+django2.0.2-rest-framework 生鲜项目(九)


 一、social_django 集成第三方登录

1、测试:

注册新浪微博开放平台:http://open.weibo.com/authentication

 vue+django2.0.2-rest-framework 生鲜项目(十)

注册成功后,创建应用:

 vue+django2.0.2-rest-framework 生鲜项目(十)

 vue+django2.0.2-rest-framework 生鲜项目(十)

 正常需要审核通过,才能允许第三方登录调试,但项目未完成时无法通过审核的,因为我们利用测试模式来完成,

添加测试用户:即使应用没上线,这些测试用户也一样能登录的

 vue+django2.0.2-rest-framework 生鲜项目(十)

 vue+django2.0.2-rest-framework 生鲜项目(十)

微博API用户接口:

 http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI#.E7.94.A8.E6.88.B7

 vue+django2.0.2-rest-framework 生鲜项目(十)


 

进入正题:测试 

oauth2.0获取微博的access_token:

 http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI#.E7.94.A8.E6.88.B7

  vue+django2.0.2-rest-framework 生鲜项目(十)

这两个是比较重要:

  • OAuth2/authorize 请求用户授权Token
  • OAuth2/access_token 获取授权过的Access Token

 测试:获取用户信息,

步骤:

  1. 定义 get_auth_url 函数:请求用户授权Token
  2. 定义 get_access_token 函数:获取授权过的Access Token
  3. 定义 get_user_info 函数:拿着用户授权token、uid,我们就可以请求到用户在微博中注册的用户信息

 1)定义 get_auth_url 函数:请求用户授权Token

 vue+django2.0.2-rest-framework 生鲜项目(十)

 

def get_auth_url():
    """
    client_id   必填,申请应用时分配的AppKey。
    redirect_uri    必填,授权回调地址,站外应用需与设置的回调地址一致。
    在该应用的基本信息、高级信息可找到
    """
    weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
    redirect_uri = "http://remote_ip:8000/complete/weibo/"
    client_id = "8****0581"
    auth_url = weibo_auth_url+"?client_id={client_id}&redirect_uri={re_url}".format(
                                            client_id=client_id,
                                            re_url=redirect_uri
                                            )

 auth_url是个url,我们在浏览器上访问这个url,会跳出个页面,即是Token授权请求:

 vue+django2.0.2-rest-framework 生鲜项目(十)

 

 2)定义 get_access_token 函数:获取授权过的Access Token

  步骤1)是请求Token授权,步骤2)是要获取授权的Token

 vue+django2.0.2-rest-framework 生鲜项目(十)

def get_access_token(code):
    """
    code:get_auth_url中的auth_url返回url中有带有一个code值,在这里就需要用到了
    """
    access_token_url = "https://api.weibo.com/oauth2/access_token"  # OAuth2的access_token接口
    import requests
    re_dict = requests.post(access_token_url, data={
        "client_id": "8****0581",  # 申请应用时分配的AppKey
        "client_secret": "",  # 申请应用时分配的AppSecret
        "grant_type": "authorization_code",  # 请求的类型,填写authorization_code
        "code": code,  # 调用authorize获得的code值 ,请求用户授权时能获取到
        "redirect_uri": "http://remote_ip:8000/complete/weibo/",  # 回调地址,需需与注册应用里的回调地址一致

    })
    pass

运行时,在re_dict中的text存有数据,是一个字典,被json化:

 vue+django2.0.2-rest-framework 生鲜项目(十)

 vue+django2.0.2-rest-framework 生鲜项目(十)

3)定义 get_user_info 函数:拿着用户授权token、uid,我们就可以请求到用户在微博中注册的用户信息了

 微博API:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

  这个API里面的数据信息,基本都是要求登录或已认证过的用户才能访问,我们通过上面获取的用户授权Token,测试访问用户接口 → 进入用户接口

 vue+django2.0.2-rest-framework 生鲜项目(十)

 vue+django2.0.2-rest-framework 生鲜项目(十)

 vue+django2.0.2-rest-framework 生鲜项目(十)

def get_user_info(access_token,uid):
    """
    获取用户信息
    :param access_token: 即为get_access_token中的re_dict获得的access_token
    :param uid: 即为get_access_token中的re_dict获得的uid
    """
    user_url = "https://api.weibo.com/2/users/show.json"  # 用户接口的url
    get_url = user_url+"?access_token={at}&uid={uid}".format(at=access_token,uid=uid)
    print(get_url)   # 包含所有该用户的信息

 

通过上述三个步骤的操作,我们便可以拿到用户的信息了,接着通过这些用户信息,在我们自己项目中为用户注册一个新账号就可以了。

完整代码:

def get_auth_url():
    """
    client_id   必填,申请应用时分配的AppKey。
    redirect_uri    必填,授权回调地址,站外应用需与设置的回调地址一致。
    在该应用的基本信息、高级信息可找到
    """
    weibo_auth_url = "https://api.weibo.com/oauth2/authorize"
    redirect_uri = "http://remote_ip:8000/complete/weibo/"
    client_id = "8****0581"
    auth_url = weibo_auth_url+"?client_id={client_id}&redirect_uri={re_url}".format(
                                            client_id=client_id,
                                            re_url=redirect_uri
                                            )

def get_access_token(code):
    """
    code:get_auth_url中的auth_url返回url中有带有一个code值,在这里就需要用到了
    """
    access_token_url = "https://api.weibo.com/oauth2/access_token"  # OAuth2的access_token接口
    import requests
    re_dict = requests.post(access_token_url, data={
        "client_id": "8****0581",  # 申请应用时分配的AppKey
        "client_secret": "",  # 申请应用时分配的AppSecret
        "grant_type": "authorization_code",  # 请求的类型,填写authorization_code
        "code": code,  # 调用authorize获得的code值 ,请求用户授权时能获取到
        "redirect_uri": "http://remote_ip:8000/complete/weibo/",  # 回调地址,需与注册应用里的回调地址一致

    })
    pass


def get_user_info(access_token,uid):
    """
    获取用户信息
    :param access_token: 即为get_access_token中的re_dict获得的access_token
    :param uid: 即为get_access_token中的re_dict获得的uid
    """
    user_url = "https://api.weibo.com/2/users/show.json"  # 用户接口的url
    get_url = user_url+"?access_token={at}&uid={uid}".format(at=access_token,uid=uid)
    print(get_url)   # 包含所有该用户的信息


if __name__ == "__main__":
    get_auth_url()
    get_access_token(code=) # code 必填 ,根据get_auth_url获得
    get_user_info(access_token= ,uid=)  #access_token 、 uid 必填 ,根据get_access_token获得
第三方登录(微博)获取用户信息

相关文章:

  • 2021-06-26
  • 2021-05-27
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案