上一篇的的的链接 赖了一个星期了,let us 接着上一篇的搞。
在上一篇里搞了一下基础设施建设,这一篇我们...稍微搞那么一丢丢上层建筑。
小程序登陆其实是个比较简单的基本操作,但凡是看过微信开发文档的应该都能懂,不过本菜鸡还是想尝试性的分享一下。
首先先明确一下 为啥要用微信登陆 ,在本菜鸡看来在这个项目里使用微信登陆主要有三个目的
然后,明确一下微信登陆过程中的几个概念
然后,结合本次项目的实际情况捋一下微信登陆的流程
$url='https://api.weixin.qq.com/sns/jscode2session?appid='.$this->appId.'&secret='.$this->appSecret.'&js_code='.$code.'&grant_type=authorization_code'; 复制代码
$wxResult=json_decode(curl_get($url),true); if(!$wxResult||!array_key_exists('openid',$wxResult)){ return ResultService::failure('获取openid不成功'); } $openId=$wxResult['openid']; 复制代码
其实获得到openid微信登陆已经差不多了,剩下就是怎么用的问题了,下面的步骤是在本次项目的流程,供各位老哥参考
至此,本项目中微信登陆的流程搞完了。登陆完的结果就是,后台新增或更新了用户数据,小程序端有了token。
本菜鸡个人觉得常用的保持登陆状态的方法有两种
先说第一种,也是本项目采用的方法,其实在上面的步骤5、6已经把这个方法将清楚了,
第二种也在做网站用户登陆的时候是非常常见的操作,在撸网站的时候,用户登陆后把用户信息存到session里,用户在请求的时候能够从session中取到用户信息,之所以这样是因为,浏览器请求服务器,服务器响应时,会带一个sessionid回去给浏览器,浏览器下次请求时候会自动带着sessionid,服务器会根据sessionid来到相应的会话里,所以能取到session中的用户
BUT在小程序中有所不同,这是因为小程序网络访问是用的微信封装的wx.request,而该方法并不会把sessionid存下来,因此,为了能和网站登陆搞成一个逻辑,我们手动存一下sessionid,在下次请求的时候带着sessionid去即可。
部分代码如下
服务端(PHP)
//前面先搞登陆,登陆完了把用户存到session里然后 return ResultService::success('',['sessionId'=>session_id()]); 复制代码 小程序端 //登陆 dataUtils.userLogin({ code: code, info: JSON.stringify(info) }).then(res => { if (res.statusCode == '200') { wx.setStorageSync('sessionId', res.data.data.sessionId); $Message({ content: '登陆成功', type: 'success' }); this.checkUserLogin(); } else { $Message({ content: '登陆未成功', type: 'error' }); } //请求例子(不同后端header名不一样,比如php的后端就是 PHPSESSID=你的sessionId) function userJoinPromise(data,sessionId){ let url = 'travel/api/userJoin'; return getServerDataPromise(url, data, { 'Cookie': 'PHPSESSID=' + sessionId }); } |
复制代码
下班了下班了,先写到这明天继续撸