首先我们需要知道的登录的逻辑问题。实现一个完善的登录的流程
1. app.js。只是一个获取用户信息的地方存入全局;
2. 如果存在不需要注册,如果不存在就需要注册导航进入注册页面
3. 进入我的页面进入我的页面进行注册更新信息
1.用户进入小程序需要授权
授权
部分接口需要获得用户授权同意后才能调用。此类接口调用时:
- 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
- 如果用户已授权,可以直接调用接口;
- 如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
用户进入小程序需要授权,如果用户拒绝一次授权会影响很多操作,需要重新调取
2.重新调取
打开设置界面
用户可以在小程序设置界面(右上角 - 关于 - 右上角 - 设置)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting
打开设置界面,引导用户开启授权。
以下是官方给出的通过getSetting 调出用户授权的页面
3.如果用户再次拒绝就自己看着办
// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
wx.getSetting({
success(res) {
if (!res.authSetting['scope.record']) {
wx.authorize({
scope: 'scope.record',
success() {
// 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
wx.startRecord()
}
})
}
}
})
具体的授权
scope | 对应接口 | 描述 |
---|---|---|
scope.userInfo | wx.getUserInfo | 用户信息 |
scope.userLocation | wx.getLocation, wx.chooseLocation | 地理位置 |
scope.address | wx.chooseAddress | 通讯地址 |
scope.invoiceTitle | wx.chooseInvoiceTitle | 发票抬头 |
scope.werun | wx.getWeRunData | 微信运动步数 |
scope.record | wx.startRecord | 录音功能 |
scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 保存到相册 |
scope.camera | 摄像头 |
我的前段代码
if (app.globalData.userInfo) {
console.log(app.globalData.userInfo)
console.log(1)
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
console.log(res)
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
//console.log(res.userInfo)
//console.log(res.userInfo.avatarUrl)
//app.globalData.userInfo = res.userInfo
console.log(res)
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
},
fail:res=>{
console.log(1)
// wx.navigateTo({
// url: '/pages/redesign/redesign'
// })
wx.openSetting({
success: (res) => {
console.log(res)
res.authSetting = {
"scope.userInfo": true,
"scope.userLocation": true
}
wx.getUserInfo({
success: res => {
console.log(res)
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
},
})
}
})
}
})
}
我的获取用户openid代码
public function wxopenid($js_code){
$appId = 'xxxxxxxxxxxxxxxxx';
$secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$js_code = I('get.js_code');
//创建请求数据
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appId}&secret={$secret}&js_code={$js_code}&grant_type=authorization_code";
$data = $this->curl_get_https($url);
print_r($data);//返回数据
}
/**
* 模拟get进行url请求
* @param string $url
* @param string $param
*/
public function curl_get_https($url){
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
$tmpInfo = curl_exec($curl); //返回api的json对象
//关闭URL请求
curl_close($curl);
return $tmpInfo; //返回json对象
}