[miniApp] WeChat user login code
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的更多相关文章
- 小程序如何获取code
小程序如何获取code <button open-type="getUserInfo" hover-class='none' bindgetuserinfo="ge ...
- 初尝微信小程序开发与实践
这可能是一个java程序员最不务正业的一次分享了. 小程序的火热相信不用我多说了,年初的时候老婆去浦东某达面试,甚至都被问有没有小程序测试经验.俨然小程序成为了互联网公司自PC,WAP,安卓,IOS之 ...
- 前端html第三方登录集合,微信,微博,QQ
申请开发者账号之内的就不累赘了,网上一大堆: 说下需求,一个网页要在三类容器运行,公司app,微信自动登录,浏览器. 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...
- 第三方登陆微博、qq、微信
源文:http://blog.csdn.net/tivonalh/article/details/60954373 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...
- 【WEB开发】微信网页授权第三方登录接口(WEB登录)
随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式.(具体代码U盘) 本文链接至:http://blog.csdn.net/hxke ...
- 微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主, 两种(正常注册手机号码-密码+一键获取当前用户手机号码) getPhoneNumber这个组件 ...
- 转载:微信开放平台开发第三方授权登陆(二):PC网页端
微信开放平台开发第三方授权登陆(二):PC网页端 2018年07月24日 15:13:32 晋文子上 阅读数 12644更多 分类专栏: 微信开发 第三方授权登录 版权声明:本文为博主原创文章,遵 ...
- 服务器部署Java Web及微信开发调试
参考摘抄: 阿里云部署Java网站和微信开发调试心得技巧(上):https://www.imooc.com/article/20583 阿里云部署Java网站和微信开发调试心得技巧(下):https: ...
- Hexo + Serverless Framework,简单三步搭建你的个人博客
很多人都想拥有自己的个人博客,还得看起来漂亮.酷酷的.尤其对开发者来说,不仅可以分享技术(装)心得(逼),面试的时候还能成为加分.这里介绍两款好用的神器,不用忙前(前端)忙后(后端),简单3min即可 ...
随机推荐
- visual studio 2015安装
问题:安装过程老是报:安装包丢失或者损坏,但是去虚拟光驱里面可以查找到该安装包. 解决:可能文件下载ISO过程中丢失了一些数据.使用“Hash(MD5校验工具)”检测文件的“SHA-1”值,然后与官网 ...
- Unity笔记(3)自学第二天
学习记录: 界面使用: 脚本使用: 脚本注意点:
- Smarty的应用
smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.inc.php这是入口文件(3)plugins:自己写的插件文件夹(4)templates_ ...
- 没搞错吧,我只是个web前端工程师,不是manager,也不是leader...
那个时候,我只想好好的学习web前端技术,恨不得把有限的时间和精力都放在提升技术上. 然而,让自己在坑里茁壮成长,要先适应坑内的环境. 首当其冲我们要弄明白的事情有: 团队成员的技术能力和状态 Lea ...
- 安卓app测试之Monkeyscript
MonkeyScript是一组可以被Monkey识别的命令集合 优点:MonkeyScript可以完成重复固定的操作 使用:adb shell monkey -f <scriptfile> ...
- PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验
最近研究遥感,用到分类算法,PIE SDK正好提供了一些方法可供调用,他们的官方博客上也有相应的示例代码(可参考:https://www.cnblogs.com/PIESat/p/10725270.h ...
- sectional data interpolation in Tecplot
$!Varset |NumLoop|= $!Loop |NumLoop| $!Varset |num|=(|Loop|*+) $!RotateData ZoneList = [] Angle = |n ...
- 关于vuex自己理解的三幅图
- vue父组件向子组件传递参数
父组件中引用的子组件 <pics :is-pics="showpics" // 这是我们要传递的参数 :is-product="productMsg" : ...
- 1.Zigbee开发学习资源
http://blog.csdn.net/zhanglianpin/article/details/46907349