zoukankan      html  css  js  c++  java
  • 在django中实现QQ登录

    在服务器端做qq登录的流程:
    1.放置QQ登录按钮,这个去QQ的网站上下,把这个按钮的连接指向https://graph.qq.com/oauth2.0/authorize?response_type=code& client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope= [THE_SCOPE],也可以先指向自己的网站,然后再重定向过去,这样可以避免APPID暴露;
    2.在上面连接的redirect_uri的处理函数中获取code;
    3.利用此code向https://graph.qq.com/oauth2.0 /token?grant_type=authorization_code&client_id=[YOUR_APP_ID]& client_secret=[YOUR_APP_Key]&code=[The_AUTHORIZATION_CODE]& state=[The_CLIENT_STATE]&redirect_uri=[YOUR_REDIRECT_URI]中请求access_token,
    4.得到返回的access_token后,再向https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN请求获取openid,
    5.最后利用access_token与openid可以调用腾讯提供的其他API了。
    那么对应于django的web服务端,应该怎么操作呢,步骤如下:
    1.在QQ按钮的请求地址进行重定向到qq那边;
    2.在对应的redirect_uri中进行处理,获取变量code的值;

    3.用urllib2库向qq请求access_token,获取返回的access_token;

    4.然后再用urllib2库,access_token构造请求获取openid;

    5.根据网站自己的账户规则,提示用户 注册本站的用户名,邮箱号等(密码可以不要),然后再数据库中增加此账号(如果你嫌麻烦,可以程序随机生成一个账号,不需要用户填写信息),再另一个表中 记录openid,外键指向刚才的账号,同时将username,openid,access_token,token_timestamp记入session中。

    新表的model如下:

    6.创建用户,并与qq账号关联

    7.至此,就可以调用qq提供的其他API了;

    8.如果用户没有注销,下 次登录,直接根据cookie取session中的username,  openid,access_token,token_timestamp等数据,根据token_timestamp判断是否过期,如果过期,再重复步 骤1-3,并在session中更新access_token,token_timestamp;如果没有过期,则就当已经登录的正常用户处理,可以直接 调用qq提供的API

    9.如果用户注销,下次登录,则直接重复1-4,根据openid反查出username等,存入session.

    最后再说下调试,由于qq的key跟id都需要用域名去申请,并且传递的redirect_url也必须是这个域名的,所以在调试的时候,可以将自己的PC的host文件修改了,一般路径为C:\Windows\System32\drivers\etc\host,大概修改如下

      

      

      

     
    分类: Python
  • 相关阅读:
    不弹出提示直接关闭页面
    orcale表解锁
    序列化和反序列化
    js 实现post传参
    简易实现 instanceOf
    简易实现virtualdom
    react中setState同步、异步问题
    CMake Qt 配置 OpenCV
    VS执行时打开cmd
    VS2019+Qt5.15.2环境配置
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2673985.html
Copyright © 2011-2022 走看看