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. Spring: (一) -- 春雨润物之 核心IOC

    作为一个Java人,想必都或多或少的了解过Spring.对于其优势也能道个一二,诸如方便解耦.支持AOP编程.支持声明式事务.方便测试等等.Spring也不仅仅局限于服务器端开发,它可以做非常多的事情 ...

  2. Listview多种布局的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  3. poj1787 Charlie's Change

    思路: 完全背包,记录路径. 实现: #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; ] ...

  4. vue2.0之60s验证码发送

    快速的说下我的60s经历不管移动还是pc端的登录都需要发送验证信息,那么我们熟悉的那个验证按钮就不可少了.首先,我们都知道的一些基本功能.1.验证账号输入的格式正确与否(减少传递基本的错误信息)2.@ ...

  5. Django--1、MTV及基本应用

    web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,以避免重复造轮子. 所有的Web应用,本质上是一个socket服务 ...

  6. Android屏幕尺寸与度量单位(px,dp,sp)简介

    MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...

  7. 关于 . H 宏定义技巧

    #ifndef   LABEL #define   LABEL //代码部分 #endif LABEL为一个唯一的标号,命名规则跟变量的命名规则一样.常根据它所在的头文件名来命名,例如,如果头文件的文 ...

  8. Queries for Number of Palindromes(求任意子列的回文数)

    H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...

  9. getBlockTable delete pline

    AcDbBlockTable *pBlkTab; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ...

  10. 【maven】Description Resource Path Location Type An error occurred while filtering resources TESTVIDEO line

    在maven中构建项目的时候发现了如下错误: Description Resource Path Location Type An error occurred while filtering res ...