註銷的功能,直接寫在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{ @Autowired private 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的使用其實真的很有用!
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文鏈接地址:「小程序JAVA實戰」小程序我的個人信息-註銷功能(42)