微信小程序开发之——用户登录-实现(3)
一 概述用户登录成功后上传code,用户服务器保存session并返回token用户登录成功后通过token返回用户积分二 用户登录-上传code返回token2.1 服务器端-login接口(见2服务器搭建)app.post('/login',(req,res)=>{console.log("login code:"+req.body.code);var url='https://api.
·
一 概述
- 用户登录成功后上传code,用户服务器保存session并返回token
- 用户登录成功后通过token返回用户积分
二 用户登录-上传code返回token
2.1 服务器端-login接口(见2服务器搭建)
app.post('/login',(req,res)=>{
console.log("login code:"+req.body.code);
var url='https://api.weixin.qq.com/sns/jscode2session?appid='+wx.appid+"&secret="+wx.secret+"&js_code="+req.body.code+"&grant_type=authorization_code";
request(url,(err,response,body)=>{
console.log('session:'+body);
if(body){
var session=JSON.parse(body);
var token='token_'+new Date().getTime();
db.session[token]=session; //保存用户记录,设置用户初始积分为100
if(!db.user[session.openid]){
db.user[session.openid]={credit:100}
}
}
res.json({token:token})
});
});
2.2 小程序端(app.js)
App({
onLaunch() {
this.login()
},
globalData: {
token: null //保存token
},
login: function () {
wx.login({
success: res => {
console.log('login code:' + res.code);
wx.request({
url: 'http://127.0.0.1:3000/login',
method: 'post',
data: {
code: res.code
},
success: res => {
console.log('token:' + res.data.token);
this.globalData.token = res.data.token
//将token保存到数据缓存(下次打开小程序无需要重新获取token)
wx.setStorage({
key: 'token',
data: res.data.token
})
}
})
}
})
},
2.3 结果
小程序调试器(Console)
[sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引
app.js? [sm]:42 login code:051Xt9ll2sGlN74Wvkll2jFqOq4Xt9lg
app.js? [sm]:50 token:token_1632363016379
开发者服务器(终端)
checklogin:[object Object]
login code:051Xt9ll2sGlN74Wvkll2jFqOq4Xt9lg
session:{"session_key":"+NlPNU6s+cjqhXhqpcfk9w==","openid":"ovxEk0Y5Xf4IuOQs0kojx7L6vhHk"}
三 用户登录-通过token返回用户积分
3.1 新建login page
调整app.json中pages的顺序,让pages/login/login
位居第一项
3.2 开发者服务器(index.js)新增获取积分接口
//获取积分
app.get('/credit',(req,res)=>{
var session=db.session[req.query.token];
if(session&&db.user[session.openid]){
res.json({credit:db.user[session.openid].credit})
}else{
res.json({err:'用户不存在,或未登录。'});
}
})
3.3 小程序(login页面)
pages/login/login.wxml
<button bindtap="credit">获取用户的积分</button>
pages/login/login.js
const app = getApp();
Page({
//获取用户积分
credit: function () {
wx.request({
url: 'http://127.0.0.1:3000/credit',
data: {
token: app.globalData.token
},
success: res => {
console.log(res.data);
}
})
},
sendUserInfo: function () {
var token = app.globalData.token;
wx.getUserInfo({
success: res => {
console.log("getUserInfo:" + JSON.stringify(res));
wx.request({
url: 'http://127.0.0.1:3000/userinfo?token=' + token,
method: 'POST',
data: {
rawData: res.rawData,
signature: res.signature,
encryptedData: res.encryptedData,
iv: res.iv
}
})
}
})
}
})
3.4 结果(点击获取用户积分按钮-小程序调试器Console)
{credit: 100}
四 参考源码
更多推荐
已为社区贡献4条内容
所有评论(0)