微信小程序退出账号怎么实现

类似于美团外卖的小程序,进去后在“我的”界面有一个退出账号功能,这个功能如何实现。最好能提供相关的js代码,感激不尽。

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

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

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及用户信息,并刷新当前页面数据。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-23
微信小程序退出账号的前提条件是用户已登陆,且在前端页面和后端服务已记录了用户的登陆状态。退出登陆的操作,相当于清除用户登陆状态的操作。因此微信小程序实现退出账号的具体流程包括以下几点: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。}。
第2个回答  2019-12-23
现在的微信里面有很多小程序,那退出账号只要写用手按住轻轻的向上一滑就可以了,然后你下次在使用的时候她就又重新出现了。
第3个回答  2017-09-04
我并没有写过这个功能
但是我觉得大体的思路可能是在缓存中缓存了一个是否登录的变量(设为isLogin) 在"我的"界面中以及下单的页面会判断isLogin的值 来限制用户是否可以进行下一步的操作

当用户登录的时候会把一些信息(这些信息应该也是存在缓存中)返回来并并且将isLogin的值改为登录状态
而当退出的时候就将isLogin的状态改为未登录,并且将登录时返回的信息删除本回答被提问者采纳
第4个回答  2019-12-23
这个好像退出不了吧!都是微信自带的
相似回答