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

jsp登录功能的实现_3-2【微信小程序全栈开发课程】登录功能(一)--实现登录功能

c9994b9800e025cc687febdd60e4f807.png

在本地搭建好后端环境之后,我们来实现登录功能

1、安装SDK插件

SDK插件用来获取用户的openId

SDK是server端(也就是后端)的插件,帮助我们很容易的获取openId。openId是微信中用户身份的唯一标识,我们通过openId来识别用户,方便后期的用户管理

~/WeChatProjects/truth_hold$ npm install --save wafer2-client-sdk

//系统返回信息
+ wafer2-client-sdk@2.1.0
added 1 package from 1 contributor and audited 10626 packages in 10.382s
> wafer2-client-sdk应用文档

https://github.com/tencentyun/wafer2-client-sdk

2、添加授权登录按钮

编辑src/pages/index/index.vue文件的template部分,添加授权登录的按钮

登录按钮是小程序小程序集成的API,规定的登录按钮的写法

<!-- 参考代码,无需粘贴
<template>
  <div> —>


    <!-- 需要粘贴的部分 -->
    <button open-type="getUserInfo" lang="zh_CN" class='btn' @getuserinfo="login">授权登录</button>

3、配置登录链接

编辑src/config.js文件,config.js文件我们用来放配置型的代码,用下面的代码替换掉原先的代码

登录链接为什么是http://localhost:5757/weapp/login,后面的课程会具体分析

//域名,通过域名来找到服务器,在这里我们将本地电脑当成服务器
//所以现在配置的域名是本地的,当项目实际上线,这里需要换成已备案的域名
const host = 'http://localhost:5757'

const config = {
  host,
  loginUrl: `${host}/weapp/login`
}

//我们在【ES6知识点详解】中讲过export的意思是向外暴露接口
//这样在其他文件中可以通过import config from '@/config'引用
//然后通过config.loginUrl就能得到在本文件中配置的值'http://localhost:5757/weapp/login'
export default config

4、删除测试代码

在第二章学习ES6时,我们在index.vue界面添加了一些代码,现在将这些测试代码删除,删除后script部分还剩下下面的代码,template、style部分暂时不需要改动

<script>
  export default {
    data () {
      return {
        mark:0
      }
    },

    methods: {
      addMark (add) {
        this.mark = this.mark + add
        console.log("mark为:",this.mark)  
      }
    }
  }
</script>

5、引用配置文件

在src/pages/index/index.vue文件中添加import引用SDK插件、config.js文件

//参考代码,无需粘贴
//<script>


  //需要粘贴的部分
  import qcloud from 'wafer2-client-sdk'
  import config from '@/config'


  //参考代码,无需粘贴
  //export default {

6、添加登录方法

编辑index.vue文件,在script的methods对象中添加方法loginSuccess和login

//参考代码,无需粘贴
//methods: {
  //addMark (add) {
    ...
  //},


  //需要粘贴的部分
  //登录成功会调用loginSuccess方法
  loginSuccess (res) {
    //将用户信息保存到缓存中,wx.setStorageSync是小程序的一个API,用来将信息添加到缓存中
    wx.setStorageSync('userinfo', res)
  },

  login () {
    //wx.showToast是小程序的消息提示框
    wx.showToast({
      title: '登录中',
      icon: 'loading'
    })
    //通过SDK插件,请求config.js中配置的loginUrl路径(http://localhost:5757/weapp/login)
    qcloud.setLoginUrl(config.loginUrl)
    qcloud.login({
      success: res => {
        //登录成功后,显示底部导航栏
        wx.showTabBar()
        console.log('登录成功', res)
        //调用loginSuccess方法,并将用户信息作为参数
        this.loginSuccess(res)
      },

      fail: err => {
        console.error('登录失败', err)
      }
    })
  }


//参考代码,无需粘贴
//},

7、授权本地域名

我们在src/config.js文件中定义的域名http://localhost:5757,不是一个真正的域名,只有在我们自己电脑上才有效

真正的域名如http://baidu.com是可以通过网络访问的

对于这种不合法的域名,在微信开发者工具中,需要授权一下

点击右上角>>图标,点击详情—本地设置,选中不校验合法域名,就可以了~

bcab2966c90cc256c37b4c8d6b98f099.png

1f9fd4891aecff55d7b6fb630bbea35b.png

8、测试

(1)打开终端,进入项目目录,打开两个窗口同时运行npm run dev

第一个窗口,在项目目录下运行npm run dev用来启动前端代码

~/WeChatProjects/truth_hold$ npm run dev

第二个窗口,在server目录下运行npm run dev用来启动后端代码

~/WeChatProjects/truth_hold/server$ npm run dev

然后点击授权登录按钮,右侧控制台出现下列信息,说明登录成功了

控制台中出现的,就是登录接口获取到的当前登录用户的微信昵称、城市、openId等信息

3ec4b3ccfc46a2cbbae4bea9001ad1f9.png

(2)登录可能出现错误--登录失败 Error: 响应错误

9ca0a3ab6e934f265105b6e60ca8cd4b.png

解决方法: 完善server/config.js文件中的下列字段

qcloudAppId: '必填',
qcloudSecretId: '必填',
qcloudSecretKey: '必填',
// 微信小程序 App ID
appId: '必填',
// 微信小程序 App Secret
appSecret: '必填',
// 是否使用腾讯云代理登录小程序,设置为false
useQcloudLogin: false,
  • qcloudAppId、qcloudSecretId、qcloudSecretKey这三个参数,我们在上一节已经配置过了。
  • appId、appSecret这两个参数需要在微信公众平台(https://mp.weixin.qq.com/)登录小程序账号—开发—开发设置中查看。
  • useQcloudLogin参数改为false

2b061ff2f0be5e7df26cfddf65a23710.png

9、查看数据库

登录mysql,可以看到cSessionInfo表中已经有一条客户信息了

我们主要会用到user_info字段,里面包含了openId、nickName等用户基本的信息

mysql> use cAuth;

mysql> select * from cSessionInfo;
| open_id                      | uuid                                 | skey                                     | create_time         | last_visit_time     | session_key              | user_info                                                                                                                                                                                                                                                                                                                                                         
+------------------------------+--------------------------------------+--------------------
| oqURH46cYrMV3IwrrflosChndRTI | 88d1f834-bd64-491e-9779-18f3653528cc | dcd4a49ed87a0f4ebdff0f40ee4a53ed5572aa01 | 2019-06-16 11:19:43 | 2019-06-16 20:13:53 | aZha8RCFtrY1mp98kj9hSg== | {"openId":"oqURH46cYrMV3IwrrflosChndRTI","nickName":"ww","gender":2,"language":"zh_CN","city":"Qingdao","province":"Shandong","country":"China","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJ2Te6nOOqiaeiae0WCWxRHKedpM7ZOs8AIU6og0ia1WChutbiaaaibthT7GbrewG0licrkbps8XajcHXzQ/132","watermark":{"timestamp":1560687233,"appid":"wxd2a52ff3594d8d7d"}} |
+------------------------------+--------------------------------------+--------------------
1 row in set (0.00 sec)
作者:猫宁一 95后全栈程序媛₍ᐢ •⌄• ᐢ₎一枚~ 热爱学习!热爱编程! 可关注【猫宁一】公众号领取我所有全栈项目代码哦~ 点击查看课程目录:微信小程序全栈开发课程目录

相关文章:

  • 《Spring 2.0核心技术与最佳实践》即将上市
  • 兵法:掌上千秋史 胸中百万兵
  • go语言怎么 控制一个变量输入的范围_go 学习笔记之值得特别关注的基础语法有哪些...
  • 颜率护鼎:读《战国策:秦兴师临周章》有感
  • python函数手册 stata_Python与Stata数据交互之时间变量
  • 知音少,弦断有谁听
  • python server酱_Python3和Server酱实现微信通知
  • 潜龙勿用,蓄积待用
  • python 不等于None 不等于空_python中输入0.1+0.2结果却不等于0.3?原来编程语言是这么算的……...
  • ihtml2document能不能根据id获取dom_javascript的DOM对象
  • 《高级分形艺术——核心算法、软件实现及创作技巧》
  • c语言fread函数的用法_Sparklyr 1.2支持foreach函数了
  • 一段对话,解决一个Exchange问题
  • ucosiii源码分析笔记 pdf下载_方舟编译器学习笔记14 DriverRunner源码分析
  • wxWidgets在windows VC++下的安装
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • css的样式优先级
  • github从入门到放弃(1)
  • java8 Stream Pipelines 浅析
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Joomla 2.x, 3.x useful code cheatsheet
  • js写一个简单的选项卡
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Redis的resp协议
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 从重复到重用
  • 如何合理的规划jvm性能调优
  • 算法之不定期更新(一)(2018-04-12)
  • 温故知新之javascript面向对象
  • 积累各种好的链接
  • ​configparser --- 配置文件解析器​
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Linux(Source Insight安装及工程建立)
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (12)Hive调优——count distinct去重优化
  • (175)FPGA门控时钟技术
  • (4)logging(日志模块)
  • (八)Flask之app.route装饰器函数的参数
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (一)UDP基本编程步骤
  • ***检测工具之RKHunter AIDE
  • **PHP分步表单提交思路(分页表单提交)
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(一):@echo off
  • .Net - 类的介绍