微信小程序授权登录和账号登录

news/2024/7/20 4:08:29 标签: 小程序

背景

最近老板让我们做一个微信小程序,他要求我们实现既可以授权登录获取用户信息,又可以选择申请账号注册,登录的一个功能。

提示:以下是本篇文章正文内容,下面案例可供类似要求参考

一、点击登录弹出选择登录方式

登录方式弹框自定义

index.wxml(示例):

<button style="display:{{bot}}" bindtap="tankuang">点击登录</button>

<view class="box" bindtap="zuida" style="display: {{display}};">
  <view class="box-bottom">
  <button style="width:100%" bindtap="sign">账号登录</button>
  <button open-type="getUserInfo" bindgetuserinfo="getPerson" style="width:100%" >微信登录</button>
  <text bindtap="quxiao">取消</text>
</view>

index.js(示例):

   data: {
    display: "none"
    }
  tankuang: function () {
    var that = this
    that.setData({
      display: "block",
    })
  },
  quxiao: function () {
    var that = this
    that.setData({
      display: "none",
    })
  },

效果图如下(示例):
在这里插入图片描述


二、选择账号登录

1.登录页面

如果还没有注册账号,点击去注册,跳转到注册页面。

登录页面效果图如下(示例):
在这里插入图片描述

sign.js(示例):

 loginForm: function(data) {
    var username = data.detail.value.username; //获取用户名;
    var password = data.detail.value.password; //获取密码;
    wx.request({
      url: '对接自己的登录接口',
      data: {
        name:username,
        password:password,
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success(res){
    // 根据返回参数判断是否登录成功;
       
      },
    })
  },

2.注册页面

根据自己的要求添加注册信息。

登录页面效果图如下(示例):
在这里插入图片描述

logon.js(示例):

  urlimg:function(){   //点击打开本地图库并选中图片上传到服务器
      wx.chooseImage({  
        count: 1, // 默认9  
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有  
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有  
        success: function (res) {  
          console.log(res);
          // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片  
          wx.uploadFile({
          url: '对接自己的上传到服务器的接口',//
          filePath: res.tempFilePaths[0],
          name: 'pic_path',  //文件对应的 key;
          header: {
            'content-type': 'multipart/form-data'
          },
          success: function (res) {
            console.log(res.data) //接口返回网络路径
            }
           })
        }  
      })  
  },
  loginForm: function(data) {
    var username = data.detail.value.username; //获取用户名;
    var usernames = data.detail.value.usernames;//获取昵称;
    var password = data.detail.value.password;//获取密码;
    var phone = data.detail.value.phone;//获取手机号;
    var img=this.data.img;//获取头像的网络地址;
   // console.log(img)
    if(phone=="" || username=='' || password=='' ||usernames==''){   
       //参数的非空验证
    }else if(phone.length!=11){
       //手机号的11位验证
    }else{
      let str = /^1[34578]\d{9}$/
      if (str.test(phone)) {
      //手机号的格式验证
            wx.request({
              url: '对接自己的注册接口',
              data: {
                name:username,
                password:password,
                portrait:res.data,
                phone:phone,
                nickname:usernames
              },
              header: {
                'content-type': 'application/json' // 默认值
              },
              success(res){
                console.log(res); //根据返回数据判断是否注册成功
                
              }
            })
      } else {
        //手机号格式不正确
         return false
       }
    }
  },

账号的登录到此结束。


三、选择微信授权登录

微信授权登录过程如下:

1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口。

2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid,这个id是用户唯一的id并且不会改变,可以把这个id返回给小程序端,小程序端本地保存openid。

3.获取用户信息很简单,并且不需要自己的服务器处理,只需要小程序端提供的API。
前端页面wxml使用一个按钮,按钮里增加几个属性,就可以回调到小程序js部分的方法上,并且带着用户的个人信息,如昵称 头像等。

4.这个时候就可以把该用户的openid 和 昵称,头像,一块调用自己服务端接口,保存到数据库中。

授权弹框效果图如下(示例):
在这里插入图片描述
wode.wxml(示例):

  <button open-type="getUserInfo" bindgetuserinfo="getPerson" style="width:100%" >微信登录</button>

wode.js(示例):

   getPerson: function (e) {
    var that = this
     wx.login({
      success(res) {
        //js调用登陆命令获取到code;
        if (res.code) {
          //   //通过code调用自己服务接口获取到openid
          if(e.detail.userInfo==undefined){
                return  false;
          }else{
         var nick = e.detail.userInfo.nickName; //获取到昵称
          var avaurl = e.detail.userInfo.avatarUrl; //获取到头像地址
          var sex = e.detail.userInfo.gender; //获取到用户性别
            wx.request({
              url: '自己服务器接口',
              data: {
                code: res.code,
                nick: nick,
                avaurl: avaurl,
                sex: sex
              },
              success: function (wxInfo) {
                console.log(wxInfo);//后台返回数据
                  } 
                })
              }
            })
          }
        } else {

        }
      }
    })

  },

获取用户信息打印效果图如下(示例):
在这里插入图片描述
感谢您的阅读, 如有什么不妥之处,还请赐教,我会继续努力,分享更好的前端代码。
点赞和在看就是最大的支持❤️


http://www.niftyadmin.cn/n/1263737.html

相关文章

一键分享到QQ空间、QQ好友、新浪微博、微信代码

通过qq空间、qq聊天、新浪微博和微信二维码分享平台提供的接口&#xff0c;实现把网页中对应的图片、标题、描述的信息参数用javascript获取后传进接口中&#xff0c;实现一键分享。 提示&#xff1a;使用到的接口(测试时需要登录&#xff0c;网址和图片必须是公网的&#xff0…

使用IntelliJ IDEA 操作MySQL数据库

一、点击idea右侧的Database&#xff0c;打开Database窗口 二、点击新建按钮&#xff0c;添加数据库链接 三、 选择数据源为MySQL&#xff0c;打开弹框 四、 在弹框中填写数据库Host&#xff0c;数据库名称&#xff0c;用户名和密码。端口默认3306&#xff0c;如果没有修改&…

VUE 设置每个页面的头部title

在 router.js 中需要在每一个路由下面多添加一个 meta:{title:‘主页’}&#xff0c;比如&#xff1a; export default new Router({mode: history,routes: [{path: /,name: HelloWorld,component: HelloWorld,meta: {title: 首页}},{path: /index,name: index,component: ind…

MySQL基础用法之数据库的操作

一、登录数据库 -u表示用户名&#xff0c;必须&#xff0c;-p表示密码必须&#xff0c;-P表示端口号&#xff0c;非必须&#xff0c;-h表示数据库地址&#xff0c;非必须。 mysql -uroot -proot -P3306 -h127.0.0.1 二、创建数据库 花括号 {} 表示必选项&#xff0c;竖线 | 表…

MySQL基础用法之数据表的基本操作

数据表是数据库中最重要的组成部分&#xff0c;是其他对象的基础。数据表有行、列之分&#xff0c;行称为记录&#xff0c;列称为字段。 一、创建数据表 CREATE TABLE [IF NOT EXISTS] table_name (column_name data_type,... ) 例如&#xff0c;用户id唯一&#xff0c;禁止重…

简单的实现全选,反选功能(html)

静态图通过jquery实现全选,反选,取消,删除功能。 静态图&#xff08;如下&#xff09;&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、html 代码如下&#xff08;示例&#xff09;&#xff1a; <body style"background: #F4F…

Apicloud——下拉刷新、上拉加载

非Apicloud中的插件 代码如下&#xff08;示例&#xff09;&#xff1a; <!doctype html><html><head><meta charset"utf-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdev…

MySQL基础用法之约束

一、约束分类 1、按功能划分 非空约束NOT NULL主键约束PRIMARY KEY唯一约束UNIQUE KEY默认约束DEFAULT外键约束FOREIGN KEY 2、按数据列数据划分 列级约束&#xff1a;对一个数据列建立的约束&#xff0c;称为列级约束。既可以在定义列时声明&#xff0c;也可以在定义列后声明…