转自:https://idig8.com/2018/09/06/xiaochengxujavashizhanxiaochengxuwodegerenxinxi-zhuxiaogongneng40/

注销的功能,直接写在springboot的controller里面就可以了,通过删除redis的方式来完成用户的注销功能。源码:https://github.com/limingios/wxProgram.git 中No.15

后端代码

后端代码通过用户user的Id,删除redis的方式来完成。编写对应的controller

  • springboot -api 项目中。
package com.idig8.controller;import java.util.UUID;import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import com.idig8.pojo.Users;
import com.idig8.pojo.vo.UsersVO;
import com.idig8.service.UserService;
import com.idig8.utils.JSONResult;
import com.idig8.utils.MD5Utils;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;@RestController
@Api(value="用户注册登录的接口",tags={"注册和登录的controller"})
public class RegistLoginController extends BasicController{@Autowiredprivate UserService userService;@ApiOperation(value="用户注册",notes="用户注册的接口")@PostMapping("/regist")public JSONResult regist(@RequestBody Users user) {//1.判断用户名和密码不能为空if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {return JSONResult.errorMsg("用户名或密码不能为空");}//2.判断用户名是否存在boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername());if(!usernameIsExist) {user.setNickname(user.getUsername());try {user.setPassword(MD5Utils.getMD5Str(user.getPassword()));} catch (Exception e) {return JSONResult.errorMsg(e.getMessage());}user.setFollowCounts(0);user.setReceiveLikeCounts(0);user.setFansCounts(0);userService.saveUser(user);}else {return JSONResult.errorMsg("用户名或已经存在,请更换在试试!");}UsersVO userVO = setUserRedisSessionToken(user);return JSONResult.ok(userVO);}@ApiOperation(value="用户登录",notes="用户登录的接口")@PostMapping("/login")public JSONResult login(@RequestBody Users user) {//1.判断用户名和密码不能为空if(StringUtils.isBlank(user.getUsername())||StringUtils.isBlank(user.getPassword())) {return JSONResult.errorMsg("用户名或密码不能为空");}//2.判断用户名是否存在Users userObject = userService.queryUserIsExist(user);if(userObject==null){return JSONResult.errorMsg("用户名或密码不存在!");}UsersVO userVO = setUserRedisSessionToken(userObject);return JSONResult.ok(userVO);}@ApiOperation(value="用户注销",notes="用户注销的接口")@ApiImplicitParam(name="userId",value="用户id",required=true,dataType="String",paramType="query")@PostMapping("/logout")public JSONResult logout(String userId) {try {redis.del(USERS_REDIS_SESSION + ":" + userId);} catch (Exception e) {return JSONResult.errorMsg("注销失败"+e.getMessage());}return JSONResult.ok();}public UsersVO setUserRedisSessionToken(Users userModel) {String uniqueToken = UUID.randomUUID().toString();redis.set(USERS_REDIS_SESSION + ":" + userModel.getId(), uniqueToken, USERS_REDIS_SESSION_TL);UsersVO userVO = new UsersVO();BeanUtils.copyProperties(userModel, userVO);userVO.setUserToken(uniqueToken);return userVO;}
}

前端代码

  • 用户登录跳转到个人信息页面
    > 修改对应的js跳转,用户登录后保存对应的token到redis中
const app = getApp()Page({data: {},doLogin: function (e) {var formObject = e.detail.value;var username = formObject.username;var password = formObject.password;// 简单验证if (username.length == 0 || password.length == 0) {wx.showToast({title: '用户名或密码不能为空',icon: 'none',duration: 3000})} else {wx.showLoading({title: '正在加载中。。。'});wx.request({url: app.serverUrl + "/login",method: "POST",data: {username: username,password: password},header: {'content-type': 'application/json' // 默认值},success: function (res) {console.log(res.data);var status = res.data.status;wx.hideLoading();if (status == 200) {wx.showToast({title: "用户登陆成功~!",icon: 'none',duration: 3000})app.userInfo = res.data.data;wx.redirectTo({url: '../mine/mine',})} else if (status == 500) {wx.showToast({title: res.data.msg,icon: 'none',duration: 3000})}}})}},goRegisterPage: function (e) {wx.redirectTo({url: '../userRegister/userRegister',})}
})

  • 个人信息页面注销
    > 在注销按钮中绑定事件方法,然后从app的全局变量app.userInfo中获得用户的id,发送请求,完成redis中用户的id的删除,完成注销并跳转到注册页面。
<view><view class='container'><image src="{{faceUrl}}" class="face"></image><label class='nickname'>{{nickname}}</label><button size='mini' class='primary' bindtap='uploadVideo'> 上传作品</button><button size='mini' type='' class='logout' bindtap='logout'>注销</button><button size='mini' type='' class='follow' data-followType='0' bindtap='followMe'>已关注</button><button size='mini' type='primary' class='follow' data-followType='1' bindtap='followMe'>关注我</button><view class='container-row'><label class='info-items'>{{fansCounts}} 粉丝</label><label class='info-items'>{{followCounts}} 关注</label><label class='info-items'>{{receiveLikeCounts}} 获赞</label></view></view></view><view class="line"></view>

// pages/mine/mine.js
const app = getApp()
Page({/*** 页面的初始数据*/data: {faceUrl: "../../resource/images/noneface.png",nickname: "昵称",fansCounts: 0,followCounts: 0,receiveLikeCounts: 0,},logout:function(e){var user = app.userInfo;wx.showLoading({title: '正在注销中。。。'});wx.request({url: app.serverUrl + "/logout?userId="+user.id,method: "POST",header: {'content-type': 'application/json' // 默认值},success: function (res) {console.log(res.data);var status = res.data.status;wx.hideLoading();if (status == 200) {wx.showToast({title: "用户注销成功~!",icon: 'none',duration: 3000})app.userInfo = null;wx.redirectTo({url: '../userRegister/userRegister',})} else if (status == 500) {wx.showToast({title: res.data.msg,icon: 'none',duration: 3000})}}})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

流程演示

  • 用户登录,redis内增加
    >用户登录保存user的id到redis中

  • 点击注销,查看redis内容
    >redis清空了对应user的id信息,跳转到注册页面。

swagger2的讲解

之前写的内容有老铁反应,swagger能详细讲讲参数不,我说这个坑我一定填。

####注释关键字详解

  • @ApiOperation

    @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”

  • @ApiImplicitParam
  • @ApiModel

    @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
    value–字段说明
    name–重写属性名字
    dataType–重写属性类型
    required–是否必填
    example–举例说明
    hidden–隐藏

@ApiModel(value="user对象",description="用户对象user")
public class Users implements Serializable{private static final long serialVersionUID = 1L;@ApiModelProperty(value="用户名",name="username",example="idig8")private String username;@ApiModelProperty(value="状态",name="state",required=true)private Integer state;private String password;@ApiModelProperty(value="id数组",hidden=true)private String[] ids;
}

PS:OK,这就是咱们个人信息中的注销功能,也可以好好熟悉下swagger api的使用其实真的很有用!

转载于:https://www.cnblogs.com/sharpest/p/10296899.html

「小程序JAVA实战」小程序我的个人信息-注销功能(42)相关推荐

  1. 「小程序JAVA实战」 小程序远程调试(九)

    在开发javaweb应用的时候,如果遇见一个问题都会调试,debug,在火狐和谷歌浏览器的时候我们也可以使用断点的方式调试js,小程序可以吗?肯定是可以的!小程序的调试也可以在手机端进行远程调试.源码 ...

  2. 「小程序JAVA实战」小程序的举报功能开发(68)

    转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...

  3. 「小程序JAVA实战」小程序头像图片上传(下)(45)

    转自:https://idig8.com/2018/09/09/xiaochengxujavashizhanxiaochengxutouxiangtupianshangchuan44/ 接下来,我们应 ...

  4. miniui datagrid 隐藏列默认赋值_「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)...

    小程序如何加载的呢?生命周期!源码:https://github.com/limingios/wxProgram.git 中的No.3 加载页面 小程序默认加载的pages中的第一个目录 不管你的名称 ...

  5. multipartfile file java 怎么获取里面的属性_「小程序JAVA实战」小程序的举报功能开发(68)...

    通过点击举报按钮,跳转到举报页面完成举报操作. 后台开发 获取发布人的userId,videoId,创建者的Id controller UserController.java package com. ...

  6. 「小程序JAVA实战」小程序的留言和评价功能(70)

    转自:https://idig8.com/2018/10/28/xiaochengxujavashizhanxiaochengxudeliuyanhepingjiagongneng69/ 目前小程序这 ...

  7. 「小程序JAVA实战」小程序的个人信息作品,收藏,关注(66)

    个人信息页面有一个tab(作品,收藏,关注)源码:https://github.com/limingios/wxProgram.git 中No.15和springboot 作品,收藏,关注的列表 Vi ...

  8. 「小程序JAVA实战」小程序我的个人信息页面开发(41)

    转自:https://idig8.com/2018/09/05/xiaochengxujavashizhanxiaochengxuwodegerenxinxiyemiankaifa40/ 已经完成了登 ...

  9. 「小程序JAVA实战」小程序的页面重定向(60)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeyemianzhongdingxiang59/ 在我们正常的浏览网 ...

最新文章

  1. Element-ui表格选中回显
  2. Spring Cloud 2022.0.0 M1 发布:需Java 17、兼容Spring Boot 3
  3. 报名开启 | 神策 2019 数据驱动大会「矩·变」等你!
  4. 大漠插件 win10 绑定
  5. C#实现让程序只能打开一个实例(总结3方法)
  6. PHP 查找链表倒数第i个节点
  7. NET Micro FrameworkのTimerクラス攻略
  8. 2018 蓝桥杯省赛 B 组模拟赛(一)I. 天上的星星(二维前缀和)
  9. windows7内存诊断工具有用吗_性能诊断利器 JProfiler 快速入门和实践
  10. 设计模式原则之六:依赖倒置原则
  11. 双亲委派模型【理解】
  12. 【渝粤教育】国家开放大学2018年秋季 1302T护理科研方法 参考试题
  13. Android 网络评分机制
  14. 计算机应用基础2016,2016年最新统考计算机应用基础试题及答案
  15. 简单几步解决 svchost 占用资源过高的问题
  16. JQAjax读页面里面的方法
  17. mysql 1032 1062_mysql slave频繁报1032_1062错误
  18. C++:函数指针调用方法
  19. 马云推出的“天猫精灵”到底有多牛? 细思极恐怖
  20. Java实习生是做什么的?Java实习生工作内容

热门文章

  1. 线性回归建模及模型诊断
  2. python 验证码收取
  3. 二手车买卖小程序开发制作功能介绍
  4. HDU1800 字典树写法
  5. oracle 完整性约束 unique和not null,oracle完整性约束
  6. 教师资格证考试时间安排已经公布了,赶紧开始准备吧
  7. NET3_RARP协议
  8. Python Selenium.WebDriver 对Cookies的处理及应用『模拟登录』
  9. springboot+poi导出指定格式Excel模板详解+Demo
  10. 7-75 航空公司VIP客户查询 (25分)