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. 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)

    //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...

  2. NodeJs学习记录(六)使用 res.locals 传递参数到页面

    res.locals的生命周期是单次请求,有点类似于java servlet 里的  httpServletRequest.setAttribute("param1",1); 既然 ...

  3. 人人都能读懂的css3 3d小demo

    css3 3d案例总结 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家.就把最近做的比较好的给大家分享下 1.旋转拼图 首先看下效果 代码主要由HTML和CSS3组成,应该说还是比较简 ...

  4. 【PostgreSQL-9.6.3】使用pg_settings表查看参数的生效条件

    PostgreSQL数据库的配置参数都在postgresql.conf文件中,此文件的目录为数据库的数据目录($PGDATA).这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本 ...

  5. Farseer.net轻量级开源框架 入门篇:逻辑层的选择

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...

  6. HDU_1006_Tick and Tick

    Tick and Tick Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. windows如何统计端口的连接数

    习惯了linux的系统管理员,对linux的命令行工具总是印象极深,几乎所有的管理都可以在命令行下完成.命令行工具是linux系统管理的主流. 而使用windows是,因为图形化的界面,大家习惯了图形 ...

  8. mysql如何将一个字段多个类型串成一个字符串?

    结论 先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段 需求: 如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧.动作片等,其 ...

  9. 洛谷——P2659 美丽的序列

    P2659 美丽的序列 单调栈维护区间最小值,单调递增栈维护区间最小值, 考虑当前数对答案的贡献,不断加入数,如果加入的数$>$栈顶,说明栈顶的元素对当前数所在区间是有贡献的,同时加入当前的数. ...

  10. python环境配置以及基本知识

    python---一种解释型语言(脚本语言),具有代码简洁.入门简单.开发效率高的优点.当然不可避免的有着暴露源码.执行效率低的缺点,但毕竟瑕不掩瑜,在数据是无比宝贵的财富的当下,无疑是一门优秀的编成 ...