微信小程序自动以微信账户登录吗

微信小程序自动以微信账户登录吗,第1张

1、用户打开小程序,在页面上调用小程序中的wx.login(Object object)接口,调用该接口获取登录凭证(code)

通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见小程序登录。

2、获取openid、unionId和session_key。将登录态code发送给自己的后台服务器,后端服务调用auth.code2Session接口

登录凭证校验。通过wx.login接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见小程序登录。

3、首次登录获取用户信息。微信小程序API近期又做了做兆调整,之前用的好好的getUserInfo做了重大调整,无法直接获取用户信息了,比如昵称头像等等,当然2021年4月13日上线前的小程序不受影响,如果想要再次升级新版本,即必须涉及到更换获取用户授权的修改,将getUserInfo改成getUserProfile接口。

推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认开发者妥善保管用户快速填写的头像昵称,避免重复d窗。建议保存信息,这样后面就无需重新获取。

4、通过上面三步,保存相关信或胡链息。就可成功登录微信小程序了,但是还需要做登录维护。

如果用户登录小程序后,然后又退出该小程序了。在一段时间内,再次进入该小程序,视为有效登陆,如果超出指定的时间,则视为无效登陆,需要重新登陆。衫孙

微信小程序退出账号的前提条件是用户已登陆,且在前端页面和后端服务已记录了用户的登陆状态。友升退出登陆的 *** 作,相当于清除用户登陆状态的 *** 作。

因此微信小程序实现退出账号的具体流程包括以下几点:

1、用户登陆 *** 作:

(1)微信小程序调用wx.login获取登录凭证(code)。

(2) 将code传递到后端服务,通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid),并生成与用户一一对应的token值,保存起来,用作用户身份的校验,同时返回给微信小程序客户端。

(3)微信小程序获取到token令牌,保存到本地,即可作为已登陆状态的凭证。

前端代码为:

const login =  function () {

wx.showLoading({ title: '登陆中' })

wx.login().then(res =>{

if (res.errMsg === 'login:ok') {

Api.login(res.code).then(data =>{

wx.hideLoading()

wx.setStorageSync('token', data) })

}})}

后端服务代码为:

async login(jsCode) {

const { ctx, app } = this

const APPID = app.config.miniProgram.appId

const SECRET = app.config.miniProgram.appSecret

const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${jsCode}&grant_type=authorization_code`

const res = await ctx.curl(url, { method: 'GET', dataType: 'json' })

const openid = res.data.openid

const session_key = res.data.session_key

const str = await app.redis.get(openid)

if (str &&JSON.parse(str).accessToken) { // 已登陆

const oldAccessToken = JSON.parse(str).accessToken

await app.redis.del(oldAccessToken)// 删除token,实现单点登陆

await app.redis.del(openid)}

const accessToken = await ctx.helper.createWxToken(openid, session_key)// 生成新的token

return accessToken}

2、退出登陆 *** 作:

(好滚老1)点击“退出账号”按钮,调用ajax请求后端退出登陆接口并传递用户token,若退出成功,则清除当前用户登陆状态和token信息。

(2)刷新当前页面数据,清除页面上的用户信息。

(3)后端API接收备核到客户端传递的用户token,查询数据库判断用户是否已登陆,若登陆,则删除或将token置为无效。

前端代码为:

const logout =  function () {

wx.showLoading({ title: '退出登陆中' })

const token = wx.getStorageSync('token')

Api.logout({ token: token }).then(data =>{

wx.hideLoading()

wx.removeStorageSync('token')

refreshPageData()

})}

后端代码为:

async logout(accessToken) {

const { ctx, app } = this

const userId = await app.redis.get(accessToken)

if (!userId) ctx.throw(400, '登陆状态已失效')

await app.redis.del(userId)// 删除userId

await app.redis.del(accessToken)// 删除token

}

扩展资料:

1、微信小程序账号密码登陆和授权登陆后,token保存在loacalStore中,在每次加载接口时,携带上token令牌,向服务端传递已登陆的状态。

2、微信小程序退出登陆需清除登陆状态,当调用微信小程序API中的wx.login()执行登陆 *** 作,通过登陆接口获取到code后需调用后端接口生成token, 由于安全问题,勿在前端使用密钥生成。在执行退出登陆 *** 作时,需清除localStorage 中缓存的token及用户信息,并刷新当前页面数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12265785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存