- 登录授权方式
登录方式 | 过程 | 推荐使用 |
---|---|---|
wx.login()获取code | code传给后台,后台向微信发请求用code换(openid和session_key)来进行业务处理。详见:链接 | 可以 |
登录页面一次性的连续授权 | 调用wx.authorize wx.getUserInfo wx.chooseAddress等获取需要的权限, wx.getSetting()返回参数判断有没有某个权限。(也可以用按钮诱导用户在登录页面点击授权如:链接 | 用户在删除小程序或拒绝授权后需要重新授权。不推荐 |
在不必要使用用户公开信息(头像,昵称等)时,不调取授权登录接口,只有在必要的时候再去判断调取授权登录接口并把获取到的用户公开信息存入数据库,这样在每次登录时直接先运行指定函数从数据库索取需要的用户公开信息(头像,昵称等)即可,此方法在删除小程序后不用再次去授权登录(因为在用户第一次授权登录时已经把用户的公开信息存入数据库了以后直接向数据库索取即可),建议使用 |
登录流程
wx.login获取code 不需要用户授权 直接给code
// app.js
onLaunch: function () {
let token = wx.getStorageSync('token') // 1. (当前项目后端对token进行了不过期处理)
if (token) {
wx.checkSession({ // 2. wx.checkSession 检测是 wx.login 返回的那个 session_key 是否失效。
success () {
console.log('session_key 未过期,并且在本生命周期一直有效')
},
fail () {
// session_key 已经失效,需要重新执行登录流程
wx.login({
success (res) {
console.log(res) // 3. 发请求将res.code传递给后端(后端会请求微信得到{session_key: '',openid: ''}进行业务处理)然后拿到token,本地存储起来,每次发请求都携带token
if (res.code) {
// 发起后端登录请求 发送 res.code 到后台换取 openId, sessionKey, unionId (当前项目后台返回的是token)
wxRequestTwo(getOpenid, { code: res.code }, 'get').then(res => {
console.log('后端返回的登录状态数据', res)
// 后端返回的自定义状态 token
wx.setStorageSync('token', res.data.openid) // 4. 存储后端返回的token (这里测试存储openid)
})
} else {
console.log('微信登录失败!' + res.errMsg)
}
}
})
}
})
} else {
// 5. 首次登录
wx.login({
success (res) {
console.log(res)
if (res.code) {
wxRequestTwo(getOpenid, { code: res.code }, 'get').then(res => {
console.log('后端返回的登录状态数据', res)
wx.setStorageSync('token', res.data.openid)
})
} else {
console.log('微信登录失败!' + res.errMsg)
}
}
})
}
}
- 获取微信用户公共信息(用户微信头像,昵称,性别等)
方式 | 过程 |
---|---|
open-data标签 | 只能用来展示,获取不到图片链接的所以无法存入后台 |
button组件的open-type | 需要用户点击按钮才可以获取到用户的公共信息 |
<view class="avatarImg">
<open-data type="userAvatarUrl"></open-data>
</view>
<view class="sexAndName">
<!-- <open-data type="userGender" lang="zh_CN" class="sex"></open-data> -->
<open-data type="userNickName" lang="zh_CN" class='nickName'></open-data>
</view>
<button open-type="getUserInfo" bindgetuserinfo='getUserInfo'>获取用户基本信息</button>
wx.getUserInfo(Object object)和点击button方式一样,需要用户授权,才能拿到(头像,昵称,性别,所在城市) 【wx.getUserInfo必须是在用户已经授权的情况下调用】
而open-data只是展示微信用户信息,而拿不到
- 退出登录
wx.clearStorage()里面可以写回调函数 成功,失败,完成 这个是异步清除
wx.clearStorageSync() 不可写回调方法 同步清除