natapp的使用
1.首先后端给的通道,前端通过 natapp xxxxxx启动 2.配置启动后的域名,下载文件到目标根目录 3.记得用域名打开 而不是ip地址和localhost 4.localhost只能自己的电脑访问。
小程序登录流程的封装
这个我只能是自己看看那的哈 ,因为这不是我想到的。
我在简书借鉴了别人的思路。
我曾经做过一个比较不友好的登录,将openid直接存在了本地,但是我后来通过了解。其实不应该去那样做。
首先我想的是所有的登录验证都是通请求接口去访问,得到登录已经过期,那么
此时去保存当前请求接口的所有参数包括回调函数,
在去调用登录接口重新获取token,
token获取成功之后,重新去请求将保存的参数赋值给这个请求。
var SAVE_POSTDATA = {} //定义一个全局变量用来存储没有登录时 所传的的请求参数
function requestPost(url, data, callback,failback) {
wx.getNetworkType({
success: res => {
const networkType = res.networkType
const token = wx.getStorageSync('token')
if (networkType === 'none') {
wx.showToast({
title: '请检查网络',
icon: 'loading',
duration: 2000,
mask: true
})
return false
} else {
wx.request({
method: 'POST',
url: host + url,
data: data,
header: {
'content-type': 'application/x-www-form-urlencoded',
'cache-control': 'no-cache'
},
success(res) {
if(res.data.code == -1){//如果token失效
//这里保存请求参数
SAVE_POSTDATA.url = url
SAVE_POSTDATA.data = data
SAVE_POSTDATA.callback = callback
login().then()//重新去获取token
}else if (res.data.code ===0){
callback(res)
}else{
wx.showModal({
title: '提示',
content: res.data.message
})
}
},
fail(res){
if(failback){
failback()
}
}
})
}
}
})
}
/**
* @param page 是否是从登录页传过来
* 当且仅当从登录也传值过来的时候才会执行成功的回调
* 其他时候都只会在post中去重新载入页面 并且重载当前页面
*/
const login = function(page){
return new Promise((resolve, reject) => {
wx.login({
success: function (res) {
if (res.code) {
wx.request({
method: 'POST',
url: host + '/apppublic/mpLogin',
data: {
code: res.code
},
header: {
'content-type': 'application/x-www-form-urlencoded',
'cache-control': 'no-cache'
},
success: function (res) {
// console.log(res)
// 登录成功
if (res.data.code === 0) {
wx.setStorageSync('token', res.data.data)
if(page == 'formLogin'){
resolve(res)
}else{
wx.showToast({
title: '登录中',
icon: 'loading',
duration: 1000
})
setTimeout(function() {
wx.showToast({
title: '登录成功',
icon: 'none',
duration: 500
})
/**
* 以下注释代码已经成功80%,但是目测不能使用于收藏,因为数据没有更新的时候后台会报错 '非收藏状态不能取消收藏'等
* 解决办法:
* 1.确保能获取到最新的状态 -- 在调用关注、收藏 等接口中 判断当前是否处于登录状态(及判断token是否存在),
* 存在即刷新当前页面数据在回调中写这个方法这样就能确保都 能获取到最近的状态了
* but 获取最新数据的办法是啥? 重新获取这个接口 刷新数据 所以回来了↓↓↓↓↓↓↓↓↓↓ 不就是刷新页面吗 。。。
*/
// SAVE_POSTDATA.data.token = res.data.data
// requestPost(SAVE_POSTDATA.url,SAVE_POSTDATA.data,SAVE_POSTDATA.callback)
loadPage() //跟更新当前页面的数据(及其登录数据)
},999)
}
}else if(res.data.code === -2 && page != 'formLogin'){
toPageSetBack()
}else{
reject(res)
}
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
},
});
})
}
/**
* 跟更新当前页面的数据(及其登录数据)
* 意在只更新数据和状态,但是中断后,操作请求不会再次执行
*/
const loadPage = function () {
let pages = getCurrentPages();
const perpage = pages[pages.length - 1]
let {options} = pages.pop();
perpage.onLoad(options);
perpage.onShow();
}
但是我这个项目没有采用这个方法。为什么注释我也已经写好了。
不怕别人看到我的不足,我只是怕自己不知道不足
不怕别人看到我的不足,我只是怕自己不知道不足
不怕别人看到我的不足,我只是怕自己不知道不足
请给予指导批评