in client/app.js, we put user login logic inside here, so that other module can reuse those code by call:

const app = getApp()

app.login()

app.js:

//app.js
var qcloud = require('./vendor/wafer2-client-sdk/index')
var config = require('./config') let userInfo const UNPROMPTED = 0
const UNAUTHORIZED = 1
const AUTHORIZED = 2 App({
onLaunch: function () {
qcloud.setLoginUrl(config.service.loginUrl)
}, data: {
locationAuthType: UNPROMPTED
}, login({ success, error }) {
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo'] === false) { this.data.locationAuthType = UNAUTHORIZED
// 已拒绝授权
wx.showModal({
title: '提示',
content: '请授权我们获取您的用户信息',
showCancel: false
})
error && error()
} else {
this.data.locationAuthType = AUTHORIZED
this.doQcloudLogin({ success, error })
}
}
})
}, doQcloudLogin({ success, error }) {
// 调用 qcloud 登陆接口
qcloud.login({
success: result => {
if (result) {
let userInfo = result
success && success({
userInfo
})
} else {
// 如果不是首次登录,不会返回用户信息,请求用户信息接口获取
this.getUserInfo({ success, error })
}
},
fail: () => {
error && error()
}
})
}, getUserInfo({ success, error }) {
if (userInfo) return userInfo qcloud.request({
url: config.service.requestUrl,
login: true,
success: result => {
let data = result.data if (!data.code) {
let userInfo = data.data success && success({
userInfo
})
} else {
error && error()
}
},
fail: () => {
error && error()
}
})
}, checkSession({ success, error }) {
if (userInfo) {
return success && success({
userInfo
})
} wx.checkSession({
success: () => {
this.getUserInfo({
success: res => {
userInfo = res.userInfo success && success({
userInfo
})
},
fail: () => {
error && error()
}
})
},
fail: () => {
error && error()
}
})
}
})

config.js:

/**
* 小程序配置文件
*/ // 此处主机域名修改成腾讯云解决方案分配的域名
var host = 'https://xxxxxx.qcloud.la'; var config = { // 下面的地址配合云端 Demo 工作
service: {
host, // 登录地址,用于建立会话
loginUrl: `${host}/weapp/login`, // 测试的请求地址,用于测试会话
requestUrl: `${host}/weapp/user`, // 测试的信道服务地址
tunnelUrl: `${host}/weapp/tunnel`, // 上传图片接口
uploadUrl: `${host}/weapp/upload`, // 拉取商品列表
productList: `${host}/weapp/product`, // 拉取商品详情
productDetail: `${host}/weapp/product/`
}
}; module.exports = config;

How to use in user page:

<!--pages/user/user.wxml-->
<image class="bg" src="/images/bg.png"></image>
<view wx:if="{{!userInfo}}">
<view class="unlogin-card">
<view class="unlogin-head"></view>
<view class="unlogin-info">
<view class="unlogin-text">未登录</view>
<view class="unlogin-tips">点击微信登录后可方便购物</view>
</view>
</view>
<button wx:if="{{locationAuthType==0}}" class="unlogin-btn" open-type='getUserInfo' bindgetuserinfo='onTapLogin'>微信登录</button>
<button wx:if="{{locationAuthType==1}}" class="unlogin-btn" open-type='openSetting' bindopensetting="onTapLogin">授权登录</button>
</view>
<view class="user-card" wx:else>
<view class="user-info">
<image class="user-head" src="{{userInfo.avatarUrl}}"></image>
<view class="user-name">{{userInfo.nickName}}</view>
</view>
<view class="user-split"></view>
<view class="user-options">
<view class="option" bindtap="onTapAddress">
<view class="option-title">收货地址</view>
<image class="option-arrow" src="/images/grey-arrow.png"></image>
</view>
<view class="option" bindtap="onTapKf">
<view class="option-title">联系客服</view>
<image class="option-arrow" src="/images/grey-arrow.png"></image>
</view>
</view>
</view>
/* pages/user/user.wxss */
.user-card {
margin: 50rpx 27rpx 0;
background: #FFFFFF;
box-shadow: 0 2rpx 13rpx 5rpx rgba(0, 0, 0, 0.02);
border-radius: 13rpx;
} .user-info {
display: flex;
align-items: center;
height: 200rpx;
} .user-head {
flex-shrink:;
margin-left: 53rpx;
height: 100rpx;
width: 100rpx;
background: #F5E069;
border-radius: 50%;
} .user-name {
flex:;
margin: 0 31rpx;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
} .user-split {
height: 8rpx;
background: #F9F9F9;
} .user-options .option {
display: flex;
align-items: center;
margin-left: 46rpx;
margin-right: 27rpx;
height: 128rpx;
border-bottom: 1px solid rgba(151, 151, 151, 0.2);
} .user-options .option:last-child {
border-bottom: none;
} .user-options .option-title {
flex:;
font-size: 30rpx;
color: rgba(29, 29, 38, 0.8);
} .user-options .option-arrow {
width: 11rpx;
height: 18rpx;
}
// pages/user/user.js
const app = getApp() Page({ /**
* 页面的初始数据
*/
data: {
userInfo: null,
locationAuthType: app.data.locationAuthType
}, onTapAddress() {
wx.showToast({
icon: 'none',
title: '此功能暂未开放'
})
}, onTapKf() {
wx.showToast({
icon: 'none',
title: '此功能暂未开放'
})
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) { }, onTapLogin: function () {
app.login({
success: ({ userInfo }) => {
this.setData({
userInfo,
locationAuthType: app.data.locationAuthType
})
},
error: () => {
this.setData({
locationAuthType: app.data.locationAuthType
})
}
})
}, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () { }, /**
* 生命周期函数--监听页面显示
*/
onShow: function () {
// 同步授权状态
this.setData({
locationAuthType: app.data.locationAuthType
})
app.checkSession({
success: ({ userInfo }) => {
this.setData({
userInfo
})
}
})
}, /**
* 生命周期函数--监听页面隐藏
*/
onHide: function () { }, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () { }, /**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () { }, /**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () { }, /**
* 用户点击右上角分享
*/
onShareAppMessage: function () { }
})

[miniApp] WeChat user login code的更多相关文章

  1. 小程序如何获取code

    小程序如何获取code <button open-type="getUserInfo" hover-class='none' bindgetuserinfo="ge ...

  2. 初尝微信小程序开发与实践

    这可能是一个java程序员最不务正业的一次分享了. 小程序的火热相信不用我多说了,年初的时候老婆去浦东某达面试,甚至都被问有没有小程序测试经验.俨然小程序成为了互联网公司自PC,WAP,安卓,IOS之 ...

  3. 前端html第三方登录集合,微信,微博,QQ

    申请开发者账号之内的就不累赘了,网上一大堆: 说下需求,一个网页要在三类容器运行,公司app,微信自动登录,浏览器. 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...

  4. 第三方登陆微博、qq、微信

    源文:http://blog.csdn.net/tivonalh/article/details/60954373 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...

  5. 【WEB开发】微信网页授权第三方登录接口(WEB登录)

    随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式.(具体代码U盘) 本文链接至:http://blog.csdn.net/hxke ...

  6. 微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码

    之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主, 两种(正常注册手机号码-密码+一键获取当前用户手机号码) getPhoneNumber这个组件 ...

  7. 转载:微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发第三方授权登陆(二):PC网页端 2018年07月24日 15:13:32 晋文子上 阅读数 12644更多 分类专栏: 微信开发 第三方授权登录   版权声明:本文为博主原创文章,遵 ...

  8. 服务器部署Java Web及微信开发调试

    参考摘抄: 阿里云部署Java网站和微信开发调试心得技巧(上):https://www.imooc.com/article/20583 阿里云部署Java网站和微信开发调试心得技巧(下):https: ...

  9. Hexo + Serverless Framework,简单三步搭建你的个人博客

    很多人都想拥有自己的个人博客,还得看起来漂亮.酷酷的.尤其对开发者来说,不仅可以分享技术(装)心得(逼),面试的时候还能成为加分.这里介绍两款好用的神器,不用忙前(前端)忙后(后端),简单3min即可 ...

随机推荐

  1. Java 8 (10) CompletableFuture:组合式异步编程

    随着多核处理器的出现,提升应用程序的处理速度最有效的方式就是可以编写出发挥多核能力的软件,我们已经可以通过切分大型的任务,让每个子任务并行运行,使用线程的方式,分支/合并框架(java 7) 和并行流 ...

  2. 打开VMware Workstation,虚拟机不见了

    1 打开VM,发现虚拟机不见了 如图所示: 此时先别急着再次安装虚拟机. 2 先打开设备上所有已安装过的虚拟机,看你需要的还在不在 3 总结 如果打开后发现你要的虚拟机还存在,直接打开就好.否则,就得 ...

  3. Android Studio Activity Intent 闪退崩溃 Toolbar

    今天写登录注册页面,点击登录页面的“注册”按钮后软件突然崩溃,直接闪退,因为是新手,只能去网上搜.虽然网上解决方法众多,但也没找到可行的.想起来可以看Logcat,马上重新运行应用,查看崩溃时的日志, ...

  4. 如何让不同浏览器调用不同的CSS样式

    如何让不同浏览器调用不同的CSS样式 由 于对W3C标准支持程度的不同,往往导致同一个CSS样式表在各种Web浏览器中的呈现大相径庭.以目前市场占有率最高的两个浏览器Microsoft Interne ...

  5. golang协程——通道channel阻塞

    新的一年开始了,不管今天以前发生了什么,向前看,就够了. 说到channel,就一定要说一说线程了.任何实际项目,无论大小,并发是必然存在的.并发的存在,就涉及到线程通信.在当下的开发语言中,线程通讯 ...

  6. How a stack frame works 栈帧的要素与构建步骤

    http://en.citizendium.org/wiki/Stack_frame To use a stack frame, a thread keeps two pointers, often ...

  7. os下,vs code 自动编译ts

    nodejs安装ts npm install -g typescript 进入工程目录,用命令初始化ts(生成tsconfig.json) tsc --init 如果要指定生成目录,打开tsconfi ...

  8. Vue-prop

    HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符.这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab- ...

  9. 00Cascading Style Sheet

    Cascading Style Sheet CSS(Cascading Style Sheet)即层叠样式表,简称样式表.要理解层叠样式表的概念先要理解样式的概念.样式就是对网页中的 元素(字体.段落 ...

  10. scala学习(1)----map和flatMap的区别

    转载:https://www.cnblogs.com/wbh1000/p/9846401.html 两者的区别主要在于action后得到的值 例子: import org.apache.spark.{ ...