python前后端分离开发Vue+Django,python前后端分离怎么实现
微信扫一扫关注个公众号。谢谢各位
第一步:https://connect.qq.com/去此网站进行授权(需要用到域名,域名需要备案通过)
审核通过后。拿到应用编号
第二步:前端定义个按钮,为按钮绑定好事件(client_id==appid)
窗户。位置。href= https://图表。QQ。com/oauth 2.0/authorize?response _ type=code client _ id=* * * * * * * * state=register redirect _ uri= encode uri( http://zhdydet。XYZ:8085/API/QQ登录’);//http://zhdydet。XYZ:8085/API/QQ登录===回调地址(qq第三方)
第三步:编写后台回调代码
//具体此代码要根据业务来。我这边用的是希罗权限框架。回调后。默认进行希罗登录授权,以及根据信息进行添加和修改用户信息
@请求映射(/qqLogin )public void qqLoginAfter(http servlet response response,HttpServletRequest请求){ try { http session session session=request。getsession();字符串代码=请求。getparameter(“code”);字符串状态=请求。getparameter(“state”);String uuid=(String)会话。get属性(“state”);如果(uuid!=null){ if(!uuid。等于(状态)){//抛出新异常(‘QQ,状态错误);} }//步骤2:通过授权代码获取访问令牌字符串网址=https://graph.qq.com/oauth2.0/token?grant _ type=authorization _ code client _ id= QQ http client .APPID client _ secret= QQHttpClient .APPKEY code= code redirect _ uri= QQHttpClient .回调;string access _ token=QQ http client。getaccesstoken(URL);//第三步:获取回调后的信息值网址=https://graph.qq.com/oauth2.0/me?access _ token= access _ token string OpenID=qqhttpclient。获取OpenID(URL);//第四步:获取即时通信软件用户信息网址=https://graph.qq.com/user/get_user_info?access _ token= access _ token oauth _ consumer _ key= QQHttpClient .APPID OpenID= openiduser user=userservice。selectbyopenid(OpenID);JSON对象JSON对象=qqhttpclient。获取userinfo(网址);字符串头像img=JSON对象。getstring(图URL _ QQ );字符串昵称=JSON对象。getstring(昵称);string gender=JSON对象。getstring(性别);用户用户1=新用户();subject subject=安全工具。get subject();if(user==null){ user 1。设置realname(昵称);用户1。设置图片(头像img);用户1。设置OpenID(OpenID);用户1。设置用户名(OpenID);string salt=get salt();user1.setSalt(盐);String password=MD5Utils .MD 5编码(OpenID _ salt _ 123456 , utf-8 );user1.setPassword(密码);用户1。设置roleid(5);用户1。setaddtime(新日期());这个。用户服务。insertuser(用户1);用户名密码令牌信息=新的用户名密码令牌(OpenID, 123456 );主题。登录(信息);//响应。发送重定向(/API/index );}else{ user1.setRealName(昵称);用户1。设置图片(头像img);用户1。设置OpenID(OpenID);用户1。设置用户名(OpenID);用户1。setid(用户。getid());用户1。setupdatetime(new Date());这个。用户服务。更新用户(用户1);用户名密码令牌信息=新的用户名密码令牌(OpenID, 123456 );主题。登录(信息);} redisTemplate.opsForValue().set( user:info ): subject。getsession().getId(),用户1,1L,时间单位.小时);回应。发送重定向(/API/index );回应。设置状态(200);}catch (IOException e){ }}
QQHttpClient类
需要用到的专家依赖
!-http客户端相关groupIdorg.apache.httpcomponents/groupId artifact id http客户端/artifactId版本4 .5 .6/版本/依赖项
包com。公交车。utils导入com。阿里巴巴。快速JSON。JSON对象;导入org。阿帕奇。http。http实体;导入org。阿帕奇。http。httpresponse导入org。阿帕奇。http。客户。方法。http get导入组织。阿帕奇。http。impl。客户。可关闭的http客户端;导入org。阿帕奇。http。impl。客户。http客户端;导入org。阿帕奇。http。util。实体效用;导入Java。io。io异常;/* * * * @作者wwz * @日期2019-07-24 * @描述:*/公共类QQHttpClient { //QQ互联中提供的应用编号和应用详细页查询公共静态最终字符串APPID= * * * * * * * * * * * * * * ;公共静态最终字符串APPKEY=" * * * * * * * * *公共静态最终字符串回调= http://zhdydet。XYZ:8085/API/QQ登录;私有静态JSON对象parse jsonp(String jsonp){ int startIndex=jsonp。(“(”)的索引;int end index=jsonp。lastindexof());字符串JSON=jsonp。substring(startIndex 1,end index);返回JSON对象。解析对象(JSON);}公共静态字符串getAccessToken(字符串网址)抛出io异常{ closeable http client client=http clients。创建默认值();字符串标记=null http get http get=new http get(URL);HttpResponse响应=客户端。执行(http get);HttpEntity实体=响应。获取实体();如果(实体!=null){ String result=entity utils。tostring(实体,“UTF-8”);如果(结果。( access _ token )=0){ String[]array=result的索引。拆分();for(String str:array){ if(str。( access _ token )=0){ token=str的索引。子字符串。的索引(=)1);打破;} } } } httpGet .释放连接().返回令牌;}公共静态字符串getOpenID(字符串网址)抛出io异常{ JSON object JSON object=null可关闭的http客户端客户端=http客户端。创建默认值();http get http get=new http get(URL);HttpResponse响应=客户端。执行(http get);HttpEntity实体=响应。获取实体();如果(实体!=null){ String result=entity utils。tostring(实体,“UTF-8”);jsonObject=parseJSONP(结果);} http get。释放连接();if(jsonObject!=null){返回JSON对象。getstring( OpenID );}否则{返回null} }公共静态JSON对象获取userinfo(字符串URL)抛出io异常{ JSON object JSON object=null可关闭的http客户端客户端=http客户端。创建默认值();http get http get=new http get(URL);HttpResponse响应=客户端。执行(http get);HttpEntity实体=响应。获取实体();如果(实体!=null){ String result=entity utils。tostring(实体,“UTF-8”);JSON对象=JSON对象。解析对象(结果);} http get。释放连接();返回jsonObject}}感谢观看,可以在微信搜索公众号 威信交流,以后准备在公众号更新一些文章
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。