微信小程序 后台登录(非微信账号)实例详解


Posted in Javascript onMarch 31, 2017

微信小程序 后台登录

实现效果图:

微信小程序 后台登录(非微信账号)实例详解

最近写了一个工具类的小程序,按需求要求不要微信提供的微信账号登录,需要调取后台登录接口来登录。由于小程序大部分都是调取微信信息登录,很少有调用自己后台来登录的,所以写的时候各种坑,现在把趟好坑的代码共享给大家吧!(PS:如有不妥之处,共勉之。)

微信小程序 后台登录(非微信账号)实例详解

废话不说,直接上代码

找到app.js在里面写如下代码

App({
 onLaunch: function () {
  //调用API从本地缓存中获取数据
  var logs = wx.getStorageSync('logs') || []
  logs.unshift(Date.now())
  wx.setStorageSync('logs', logs)
 },
 globalData: {
  adminUserViewId: "",
  token: "",
  userInfo: null,
  BaseURL:"http://airb.cakeboss.com.cn"
  // BaseURL:"http://192.168.0.107:8080"
 },

敲黑板划重点:上图中的代码片段重要的地方就是:“globalData中的 adminUserViewId: "",token: "" ”

这两个参数是前端需要存储的后台参数,用来标记用户的登录状态的。

然后建一个login文件夹,在login.wxml中写如下代码

<import src="../../components/toast.wxml" />

<!-- is="toast" 匹配组件中的toast提示 如果用dialog的话这就是dialog -->
<template is="toast" data="{{ ...$wux.toast }}" />
<view class="login_container">
 <view class="login_view">
  <text class="login_lable">账号:</text>
  <input class="login_text" placeholder="请输入登录账号" bindinput="listenerUsernameInput"/>
 </view>
 <view class="login_view">
  <text class="login_lable">密码:</text>
  <input class="login_text" placeholder="请输入密码" password="true" bindinput="listenerPasswordInput"/>
 </view>
 <view>
  <button class="login_button" bindtap="loginAction">登录</button>
 </view>
</view>

然后建一个login文件夹,在login.wxss中写如下代码

.login_container {
 margin-top: 30px;
}

.login_view {
 width: calc(100% - 40px);
 padding: 0 20px;
 line-height: 45px;
 height: 45px;
 margin-bottom: 20px;
}

.login_text {
 float: left;
 height: 45px;
 line-height: 45px;
 font-size: 12px;
 border: 1px solid rgb(241, 242, 243);
 padding: 0 12px;
 width: calc(100% - 70px);
 border-radius: 4px;
}

.login_lable {
 float: left;
 font-size: 12px;
 width: 40px;
}

.login_button {
 width: 150px;
 background: green;
 color: #fff;
}

在login.js中写如下代码

//login.js
//获取应用实例
var app = getApp()
var util = require('../../utils/util.js');

Page({
 data: {
  motto: 'Hello World',
  username: "",
  password: ""
 },
 onLoad(options) {
  // 初始化提示框
  this.$wuxToast = app.wux(this).$wuxToast
 },
 /** 监听帐号输入 */
 listenerUsernameInput: function (e) {
  this.data.username = e.detail.value;
 },
 /** 监听密码输入 */
 listenerPasswordInput: function (e) {
  this.data.password = e.detail.value;
 },
 // 登录按钮点击事件
 loginAction: function () {

  var userName = this.data.username;
  var passwords = this.data.password;
  var that = this;

  if (userName === "") {
   that.$wuxToast.show({
    type: 'text',
    timer: 1000,
    color: '#fff',
    text: "用户名不能为空!",
    success: () => console.log('用户名不能为空!')
   })
   return;
  } if (passwords === "") {
   that.$wuxToast.show({
    type: 'text',
    timer: 1000,
    color: '#fff',
    text: "密码不能为空!",
    success: () => console.log('密码不能为空!')
   })
   return;
  }

  //加载提示框
  util.showLoading("登录中...");

  var urlStr = app.globalData.BaseURL + '/api/adminUser/login';
  wx.request({
   method: "POST",
   url: urlStr, //仅为示例,并非真实的接口地址
   data: util.json2Form({
    username: userName,
    password: passwords
   }),
   header: {
    "Content-Type": "application/x-www-form-urlencoded"
   },
   success: function (res) {
    util.hideToast();
    console.log(res.data);
    var code = res.data.code;
    if (code === 200) {
     // 后台传递过来的值
     var adminUserViewId = res.data.data.adminUserViewId;
     var token = res.data.data.token;
     // 设置全局变量的值
     app.globalData.adminUserViewId = res.data.data.adminUserViewId;
     app.globalData.token = res.data.data.token;
     // 将token存储到本地
     wx.setStorageSync('adminUserViewId', adminUserViewId);
     wx.setStorageSync('token', token);
     console.log("登录成功的adminUserViewId:" + adminUserViewId);
     console.log("登录成功的token:" + token);
     // 切换到首页
     wx.switchTab({
      url: '/pages/index/index'
     })
    } else {
     that.$wuxToast.show({
      type: 'text',
      timer: 1000,
      color: '#fff',
      text: res.data.msg,
      success: () => console.log('登录失败,请稍后重试。' + res.data.msg)
     })
    }
   },
   fail: function () {
    util.hideToast();
    console.log("登录失败");
    that.$wuxToast.show({
     type: 'text',
     timer: 1000,
     color: '#fff',
     text: '服务器君好累?,请稍后重试',
     success: () => console.log('登录失败,请稍后重试。')
    })
   }
  })
 }
})

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
Jqgrid之强大的表格插件应用
Dec 02 Javascript
javascript对象的相关操作小结
May 16 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
深入浅析JSONAPI在PHP中的应用
Dec 24 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 Javascript
原生小程序封装跑马灯效果
Oct 21 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 #Javascript
ES6新特性之Object的变化分析
Mar 31 #Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 #Javascript
ES6新数据结构Map功能与用法示例
Mar 31 #Javascript
基于AGS JS开发自定义贴图图层
Mar 31 #Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 #Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 #Javascript
You might like
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
js异或加解密效果代码
2008/06/25 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
javascript getElementsByClassName函数
2010/04/01 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Django中使用Celery的方法示例
2018/11/29 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
python利用opencv保存、播放视频
2020/11/02 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
区三好学生主要事迹
2014/01/30 职场文书
八项规定整改方案
2014/02/21 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
扬州个园导游词
2015/02/06 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android