- 用户打开小程序后,点击登录按钮。
- 小程序调用微信提供的
wx.login()
API 获取用户的临时登录凭证(code)。 - 小程序将获取到的 code 发送给开发者服务器。
- 开发者服务器使用 code 向微信服务器发送请求,获取用户的唯一标识 OpenID 和会话密钥 session_key。
- 开发者服务器使用 OpenID 和 session_key 生成自己的会话密钥,用于验证用户身份和加密数据。
- 开发者服务器将生成的会话密钥返回给小程序。
- 小程序将会话密钥存储在本地,以便后续请求可以携带该密钥进行验证。
- 用户授权后,小程序调用微信提供的
wx.getUserInfo()
API 获取用户信息。 - 小程序将获取到的用户信息和会话密钥发送给开发者服务器。
- 开发者服务器使用会话密钥解密和验证用户信息,并保存用户信息到数据库中。
- 登录成功后,小程序跳转到首页或其他需要登录才能访问的页面。
- 需要注意的是,在步骤 4 中,开发者服务器需要向微信服务器发送一个 HTTPS 请求,因此需要有相应的 SSL 证书。另外,在步骤 8 中,如果用户没有授权,则无法获取用户信息。因此,开发者需要根据实际情况进行相应的处理,例如提示用户授权或提供其他方式进行登录。
----以下是uni的登录的代码逻辑 微信原生的话 具体可以去小程序官网查看
function wxlogin(msg) {
let that = this;
uni.showLoading({
title: '登录中'
});
uni.login({
desc: 'weixin',
success: loginRes => {
wx.getUserInfo({
success: function(res) {
uni.request({
url: myApi.loginUrl,
data: {
code: loginRes.code,
rawData: res.rawData,
signature: res.signature,
userInfo: msg
},
method: 'GET',
success(res) {
console.log('登陆成功')
console.log(res)
let userInfo = res.data.data //登陆返回的所有数据
uni.setStorageSync('userInfo', userInfo) //保存全部数据
uni.setStorageSync('dadaes', userInfo) //保存全部数据
uni.setStorageSync('token', userInfo
.token) //保存code'
var pages = getCurrentPages(); //获取所有页面的数组对象
var currPage = pages[pages.length - 1]; //当前页面
uni.reLaunch({
url: currPage.$page.fullPath
})
},
fail() {
that.$refs.uNotify.show({
message: '授权失败,请联系管理员',
type: 'error'
});
}
});
}
})
}
});
}