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. H5活动的一些事

    ISUX团队镇楼:https://isux.tencent.com/nine-question-of-swipe-html5-page.html IE6.7.8支持html5新元素 : http:// ...

  2. Hacker News的热门排名算法(转)

    Hacker News 是一家关于计算机黑客和创业公司的社会化新闻网站,由 Paul Graham 的创业孵化器 Y Combinator 创建.与其它社会化新闻网站不同的是 Hacker News ...

  3. leetcode523 Continuous Subarray Sum

    思路: 令sum[p]表示p位置的前缀和.如果sum[i] % k == sum[j] % k (j - i > 1),则存在子段(i, j]的和能够整除k. 实现: class Solutio ...

  4. 前端--3、jQuery

    介绍 jQuery是一个Javascript框架.其宗旨是——WRITE LESS,DO MORE! 是轻量级的js库,兼容CSS3和各种浏览器. 作用:处理HTMLdocuments.events. ...

  5. http协议对照表

    1**:请求收到,继续处理 2**:操作成功收到,分析.接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5**:服务器执行一个完全有效请求失败 100——客户必须继续发 ...

  6. (转)Hibernate框架基础——映射集合属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...

  7. 学习笔记——网络编程3(基于TCP协议的网络编程)

    TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议.   使用ServerSocket创建TCP服务 ...

  8. UVA - 11536 Smallest Sub-Array(尺取法)

    题目: 思路: 读完题之后第一时间想到的是尺取法来做这个题,结果让自己写写崩了,还是练得少!! 到网上搜了一下学习了大佬的标记方法,用一个变量来判断是不是都已经出现,要比每次都判断一下快超多. 代码: ...

  9. UVA - 1615 Highway(贪心-区间选点问题)

    题目: 给定平面上n(n≤105)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D. 思路: 先自己造区间,然后贪心选点就可以了.之前做过一 ...

  10. FileReader实现读取文件内容并输出到屏幕上

    FileReader与FileInputStream都是从文件读数据,而前者一次读一个字符,后者一次读一个字节(在Unicode编码环境下1个字符=2个字节) package com.janson.d ...