wx.login 接口获得临时登录凭证 code,服务端验证code生成Token
2023-12-13 08:45:05
功能描述
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
- 通过wx.login获取code
- 将code发送给我们自己的服务器
- 我们自己的服务器需要将appid+appsecret+code,三者结合到一起发送给微信服务器(appsecret的获取后面会说)
- 当微信服务器拿到appid+appsecret+code,会返回给我们的服务器一些信息包括session_key和openid
- 项目服务器将session_key和openid保存下来生成token并返回给客户端
- 客户端调把token保存下来,以后每一次发送请求必须携带token
AppID和appsecret获取
项目服务器端需要整合appid+appsecret+code三个信息,去微信服务器端换取session_key和openid,所以说我们需要一个微信服务区的接口
请求数据示例
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
返回数据示例
{
"openid":"xxxxxx",
"session_key":"xxxxx",
"unionid":"xxxxx",
"errcode":0,
"errmsg":"xxxxx"
}
通过验证临时登录凭证code,生成Token
前端请求
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
// 1. 拿到code
console.log('code'+ res.code)
const code = res.code
// 2. 将code发送给服务器,这里就需要我们的接口了
const token = wx.request({
url: '/getopenid',
data:code
})
// 3. 将token存入storge
wx.setStorageSync('token', token);
}
})
服务器端接口
router.get('/getopenid',async (ctx,next)=>{
// 得到前台出来的code
const code = ctx.query.code
//整合三者
const appId = ' wx43cf35f51c3f8fe9'
const appSecret = 'a9001166ca156245dbbbd3709a062a64'
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`
let result = await fly.get(url)
const userinfo = result.data
// 生成token(自定义登录状态),返回给前端
const token = jwt.sign({user},'hahahae')
ctx.body = token
})
文章来源:https://blog.csdn.net/m0_38013946/article/details/134848293
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!