当前位置: 首页 > news >正文

北京最好的网站建设温州通告最新

北京最好的网站建设,温州通告最新,百度获取入口,网站标签系统文章目录 一、讲解视频二、小程序前端代码三、后端Java代码四、备注 一、讲解视频 教学视频地址#xff1a; 视频地址 二、小程序前端代码 // pages/profile/profile.js import api from ../../utils/api; import { myRequest } from ../../utils/reques… 文章目录 一、讲解视频二、小程序前端代码三、后端Java代码四、备注 一、讲解视频 教学视频地址 视频地址 二、小程序前端代码 // pages/profile/profile.js import api from ../../utils/api; import { myRequest } from ../../utils/request; import Notify from vant/weapp/notify/notify; import Cache from ../../utils/cache; import Tool from ../../utils/tool;Page({/*** 页面的初始数据*/data: {isLogin: false,userInfo: {username: 还未登录请先登录,headPic: api.BASE_URL /photo/view?filenamecommon/mine_normal.jpg},basePhotoUrl: api.BASE_URL /photo/view?filename,editUser: {},profileDialogVisible: false},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {this.validateLoginState();},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {this.validateLoginState();},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {},// 预览图片previewHead: function () {let userInfo this.data.userInfo;let basePhotoUrl this.data.basePhotoUrl;wx.previewImage({current: userInfo.headPic userInfo.wxHeadPic ? userInfo.wxHeadPic : basePhotoUrl userInfo.headPic,urls: [userInfo.headPic userInfo.wxHeadPic ? userInfo.wxHeadPic : basePhotoUrl userInfo.headPic]})},// 验证登录状态validateLoginState: async function() {wx.showLoading({title: 获取登录信息...,mask: true})const loginUser Cache.getCache(getApp().globalData.SESSION_KEY_LOGIN_USER);if(Tool.isEmpty(loginUser)) {wx.hideLoading();return;}const res await myRequest({url: api.BASE_URL /app/user/get_login_user,method: POST,data: {token: loginUser}});if(res.data.code 0) {this.setData({userInfo: res.data.data,isLogin: true,editUser: res.data.data})}wx.hideLoading();wx.stopPullDownRefresh();},// 登录操作getLoginUser: function() {wx.showLoading({title: 正在登录...,mask: true})wx.getUserProfile({desc: 获取用户相关信息,success: res {if(res.errMsg getUserProfile:ok) {let username res.userInfo.nickName;let headPic res.userInfo.avatarUrl;wx.login({success: async res {if (res.errMsg login:ok) {// 调用后端接口验证用户数据const response await myRequest({url: api.BASE_URL /app/user/wx_login,method: POST,data: {wxHeadPic: headPic,wxUsername: username,code: res.code}});if(response.data.code 0) {Notify({ type: success, message: response.data.msg, duration: 1000 });Cache.setCache(getApp().globalData.SESSION_KEY_LOGIN_USER, response.data.data.token, 3600);this.setData({userInfo: response.data.data,editUser: response.data.data,isLogin: true});} else {Notify({ type: danger, message: response.data.msg, duration: 2000 });}} else {wx.showToast({icon: error,title: 登录失败});}wx.hideLoading();},fail: res {wx.showToast({icon: error,title: 登录失败});wx.hideLoading();}})} else {wx.showToast({icon: error,title: 获取用户失败});wx.hideLoading();}},fail: res {wx.showToast({icon: error,title: 获取用户失败});wx.hideLoading();}})}, // 登录验证authUser: function() {const loginUser Cache.getCache(getApp().globalData.SESSION_KEY_LOGIN_USER);if(Tool.isEmpty(loginUser)) {Notify({ type: danger, message: 请先登录, duration: 2000 });return true;} else {return false;}},// 退出登录logout: async function() {const loginUser Cache.getCache(getApp().globalData.SESSION_KEY_LOGIN_USER);const res await myRequest({url: api.BASE_URL /app/user/logout,method: POST,data: {token: loginUser}});if(res.data.code 0) {Notify({ type: success, message: res.data.msg, duration: 1000 });}Cache.removeCache(getApp().globalData.SESSION_KEY_LOGIN_USER); this.setData({isLogin: false, userInfo: {username: 还未登录请先登录,headPic: api.BASE_URL /photo/view?filenamecommon/mine_normal.jpg}});},})三、后端Java代码 !--引入http连接依赖-- dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.3/version /dependencypackage com.yjq.programmer.service.impl;import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.yjq.programmer.bean.CodeMsg; import com.yjq.programmer.dao.UserMapper; import com.yjq.programmer.domain.User; import com.yjq.programmer.domain.UserExample; import com.yjq.programmer.dto.LoginDTO; import com.yjq.programmer.dto.PageDTO; import com.yjq.programmer.dto.ResponseDTO; import com.yjq.programmer.dto.UserDTO; import com.yjq.programmer.enums.RoleEnum; import com.yjq.programmer.service.IUserService; import com.yjq.programmer.utils.CommonUtil; import com.yjq.programmer.utils.CopyUtil; import com.yjq.programmer.utils.UuidUtil; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.List; import java.util.concurrent.TimeUnit;/*** author 杨杨吖* QQ 823208782* WX yjqi12345678* create 2023-09-25 17:08*/ Service Transactional public class UserServiceImpl implements IUserService {Resourceprivate UserMapper userMapper;Resourceprivate StringRedisTemplate stringRedisTemplate;private static final Logger logger LoggerFactory.getLogger(UserServiceImpl.class);// 填写上你的AppID如何获取AppID自行百度这步骤很简单private final static String APP_ID wxc41c88e07f3f1bd7;// 填写上你的AppSecret如何获取AppSecret自行百度这步骤很简单private final static String APP_SECRET 99a06dc0d1e21d797a9915baca08c872;// 微信小程序登录校验请求地址private final static String LOGIN_URL https://api.weixin.qq.com/sns/jscode2session;/*** 小程序授权登录验证* param userDTO* return*/Overridepublic ResponseDTOUserDTO appWxLogin(UserDTO userDTO) {String url LOGIN_URL ?appid APP_ID secret APP_SECRET grant_typeauthorization_codejs_code userDTO.getCode();HttpClient client HttpClients.createDefault(); // 创建默认http连接HttpGet getRequest new HttpGet(url);// 创建一个post请求LoginDTO loginDTO new LoginDTO();try {// 用http连接去执行get请求并且获得http响应HttpResponse response client.execute(getRequest);// 从response中取到响实体HttpEntity entity response.getEntity();// 把响应实体转成文本String html EntityUtils.toString(entity);loginDTO JSON.parseObject(html, LoginDTO.class);if(null loginDTO.getErrcode()) {userDTO.setWxId(loginDTO.getOpenid());} else {return ResponseDTO.errorByMsg(CodeMsg.USER_WX_LOGIN_ERROR);}} catch (Exception e) {e.printStackTrace();return ResponseDTO.errorByMsg(CodeMsg.USER_WX_LOGIN_ERROR);}// 使用微信openId查询是否有此用户UserExample userExample new UserExample();userExample.createCriteria().andWxIdEqualTo(userDTO.getWxId());ListUser userList userMapper.selectByExample(userExample);if(null ! userList userList.size() 0) {// 已经存在用户信息读取数据库中用户信息User user userList.get(0);userDTO CopyUtil.copy(user, UserDTO.class);} else {// 数据库中不存在注册用户信息User user CopyUtil.copy(userDTO, User.class);// 自定义工具类生成8位uuiduser.setId(UuidUtil.getShortUuid());user.setUsername(user.getWxUsername());user.setHeadPic(user.getWxHeadPic());user.setRoleId(RoleEnum.USER.getCode());if(userMapper.insertSelective(user) 0) {return ResponseDTO.errorByMsg(CodeMsg.USER_REGISTER_ERROR);}// domain转dto 这步不是必须的我项目中需要这步userDTO CopyUtil.copy(user, UserDTO.class);}userDTO.setToken(UuidUtil.getShortUuid());stringRedisTemplate.opsForValue().set(USER_ userDTO.getToken(), JSON.toJSONString(userMapper.selectByPrimaryKey(userDTO.getId())), 3600, TimeUnit.SECONDS);return ResponseDTO.successByMsg(userDTO, 登录成功);}/*** 获取当前登录用户* param token* return*/Overridepublic ResponseDTOUserDTO getLoginUser(String token) {if(CommonUtil.isEmpty(token)){return ResponseDTO.errorByMsg(CodeMsg.USER_SESSION_EXPIRED);}String value stringRedisTemplate.opsForValue().get(USER_ token);if(CommonUtil.isEmpty(value)){return ResponseDTO.errorByMsg(CodeMsg.USER_SESSION_EXPIRED);}UserDTO selectedUserDTO JSON.parseObject(value, UserDTO.class);return ResponseDTO.success(CopyUtil.copy(userMapper.selectByPrimaryKey(selectedUserDTO.getId()), UserDTO.class));}/*** 退出登录操作* param userDTO* return*/Overridepublic ResponseDTOBoolean logout(UserDTO userDTO) {if(!CommonUtil.isEmpty(userDTO.getToken())){// token不为空 清除redis中数据stringRedisTemplate.delete(USER_ userDTO.getToken());}return ResponseDTO.successByMsg(true, 退出登录成功);}}四、备注 大家要跟着我的教学视频去配套着看代码了解整个登录流程的实现思路最重要 以上是我列出的主要实现代码页面实现那些根据自己需求去实现我这就不贴了如有其他遗漏代码博客评论区可以提出我会及时补充
http://www.fuzeviewer.com/news/3739/

相关文章:

  • 博物馆门户网站建设方案zenmeyong wordpress
  • 文昌建设局网站wordpress 手机主题插件
  • 会计的职能 - 智慧园区
  • 百度关键词点击器百度关键词优化曝光行者seo
  • 哪些分类网站做彩票网站多少钱
  • 做网站上传图片多大合适做网站是什么工作
  • 网站制作网站价格做网站个人
  • 整容医院网站建设目的网页个人信息页面
  • 有些网站开发人员工具无反应校园网站建设素材
  • 网站建设目标文档海南代理注册公司费用
  • 农业做的好的网站百度做网站和推广效果怎么样
  • seo好学吗入门怎么学西安官网seo公司
  • 连锁连锁酒店网站建设方案公司介绍详细
  • 经典网站设计作品网页开发的流程
  • 网站公司的利润在哪里湖北专业网站建设
  • 企业网站完整版大连金普新区规划建设局网站
  • 和一起做网店类似的网站如何设置wordpress会员注册页
  • 见网站建设客户技巧设计网站汇总
  • 网站开发需要考什么证书免费建站免费的免费
  • 网站备案查询工具wordpress 文章预览
  • 石家庄建站培训郑州网站优化的微博_腾讯微博
  • 优秀的网站首页网站初期建设阶段主要工作内容
  • 常州app网站南宁网站seo推广优化公司
  • 石家庄seo网站建设中国建设银行网站色彩
  • 爱站小工具计算器wamp 网站开发首先做什么
  • Java第二天
  • 网站建设费用推荐网络抖音搜索seo软件
  • 做公司的网站的需求有哪些有关应用网站
  • 玩具网站建设策划书关键词广告
  • 网站的域名和ip地址如何重新解析网站 备案 多久