「小程序JAVA實戰」小程序我的個人信息-註銷功能(42)

註銷的功能,直接寫在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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章