uni-app微信小程序登录;uni-app微信登录小程序;uni-app微信登录app;

思路: 通过uni-app文档可知:实现微信登录,无论是app还是小程序,都需要唯一标识openid,然后通过openid取掉后端的登录接口,获取cookie然后做登录跳转;

【-【-【必须先调用微信的登录接口uni.login() 然后再去调用授权按钮拿微信个人信息】-】-】
(否则顺序错乱会导致 小概率授权后拿不到头像和昵称)

可直接复制以下代码使用(替换下图片@/static/iconimg/wxtu.png):

需要注意91和115行代码注释,在那里调后端两个接口,分别获取openid和登录的cookie;

<template><view class="page-login"><view v-if="canIUse||canIGetUserProfile"><view class='content'><image style="width: 140rpx; height: 140rpx;" mode="aspectFit" src="@/static/iconimg/wxtu.png"></image><view class="name">登录</view><view>申请获取以下权限</view><text>获得你的公开信息(昵称、头像、地区等)</text></view><view class="login-box"><!--新版登录方式--><button v-if="canIGetUserProfile" class='login-btn' type='primary' @click="bindGetUserInfo"> 授权登录 </button><!--旧版登录方式--><button v-else class='login-btn' type='primary' open-type="getUserInfo" withCredentials="true" lang="zh_CN" @getuserinfo="bindGetUserInfo"> 授权登录 </button></view></view><view v-else class="text-center">请升级微信版本</view></view>
</template>
<script>
export default {data () {return {canIUse: uni.canIUse('button.open-type.getUserInfo'),canIGetUserProfile: false,//微信登录新旧版本 true是新}},onLoad () {//必须先调用微信的登录接口 然后再去调用授权拿微信个人信息(否则顺序错乱会导致 小概率授权后拿不到头像和昵称)this.wxLogin()var _this = thisif (uni.getUserProfile) {this.canIGetUserProfile = true}},onShow () {},methods: {//登录授权bindGetUserInfo (e) {console.log('e', e)var _this = thisif (this.canIGetUserProfile) {//新版登录方式uni.getUserProfile({desc: '获取您个人信息用于登录!',success: (res) => {console.log('用户信息', res)// 存入个人信息uni.setStorageSync('userInfo_winxin', res.userInfo)_this.updateUserInfo()},fail: (res) => {console.log(res)}})} else {//旧版登录方式 --自动就拉起授权窗口if (e.detail.userInfo) {//用户按了允许授权按钮//console.log('手动');console.log('老版用户信息', e.detail.userInfo)// 存入个人信息uni.setStorageSync('userInfo_winxin', e.detail.userInfo)_this.updateUserInfo()} else {console.log('用户拒绝了授权')//用户按了拒绝按钮}}},//登录---目的拿到codewxLogin () {let _this = this// 获取登录用户codeuni.login({provider: 'weixin',success: function (res) {//console.log(res);if (res.code) {//将用户登录code传递到后台置换用户SessionKey、OpenId等信息 可参照此篇文章: https://ask.dcloud.net.cn/article/37452// 1.拿code调后端接口1 也就是getOpenid() 换取到SessionKey、OpenId(这个是唯一且固定不变)// 2.拿openId 调后端自己写的登录接口2  获取到cookie等信息 (这个cookie后期请求放在请求头上的) 登陆成功进行存储和跳转页面//这是我们的后端接口1--换取到SessionKey、OpenId// let params = { code: res.code}// getOpenid(params, false).then((res) => {//   console.log('拿code调后端接口1 换取到SessionKey、OpenId', res)//   uni.setStorageSync('session_key', res.data.session_key)//   uni.setStorageSync('openid', res.data.openid)// })} else {uni.showToast({ title: '获取logon_code失败', duration: 2000 })console.log('获取logon_code失败' + res.errMsg)_this.wxLogin()}},fail: (res) => {uni.showToast({ title: '获取logon_code失败', duration: 2000 })console.log('获取logon_code失败' + res.errMsg)_this.wxLogin()}})},//向后台更新信息updateUserInfo () {let _this = this//这是我们的后端接口2--登录接口2  获取到cookie等信息(这个cookie后期请求放在请求头上的)// let params = {//   openid: uni.getStorageSync('openid'),//   nickname: uni.getStorageSync('userInfo_winxin').nickName,//   head_image: uni.getStorageSync('userInfo_winxin').avatarUrl,// }// loginByWechat(params).then((res) => {// })//下面的这个cookie键值对是暂时写死的,正常应该接口2返回的let login_cookie_name = 'login_cookie_name'let login_cookie_value = 'login_cookie_value'uni.setStorageSync('login_cookie_name', login_cookie_name)uni.setStorageSync('login_cookie_value', login_cookie_value)// 注意:以上的存储为了在request请求时候携带和判断用  在退出登录时候需要清除掉uni.hideLoading()uni.showToast({title: '接口登录逻辑自写-登陆成功',duration: 1500,icon: 'success',})// 跳转到首页uni.reLaunch({ url: '/pages/index/index' })}}
}
</script><style lang="less" scoped>
.content {text-align: center;
}
</style>

但是获取openid的方式不同,目前有两个方式获取到。

注意一: 获取openid

1.通过uni.login()方法,得到code,拿这个code调用后端写的接口获取openid(此方式微信小程序和app都支持,H5不支持);如何通过code换取 session 和 openid/unionid

2.app还可以通过uni.getUserInfo 直接获取到openid

注意2: 获取用户信息方法有两种

1.需要注意,uni.getUserInfo是旧方法,它不支持新的版本,在新版本小程序里使用获取到的是默认信息无效的; 微信小程序端,在用户未授权过的情况下调用此接口,不会出现授权弹窗,会直接进入 fail 回调。在用户已授权的情况下调用此接口,可成功获取用户信息。

2.推荐使用uni.getUserProfile新的获取用户方法;每次请求都会弹出授权窗口,用户同意后返回 userInfo。

这张图是微信官方更新日志:
在这里插入图片描述

获取appId和AppSecret:
在这里插入图片描述

获取code方法:
在这里插入图片描述
获取用户信息的两个方法
在这里插入图片描述

在这里插入图片描述

uni-app微信登录app方法

uni-app微信登录微信小程序方法;以及登录后如何通过code换取 session 和 openid/unionid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性表 - 数据结构和算法06

线性表 让编程改变世界 Change the world by program 感受线性表的存在 各位鱼油大家好&#xff0c;从今天开始小甲鱼带大家开始学习第一个数据结构&#xff1a;线性表 先让我我们通过图片来感受一下&#xff0c;线性表的特性吧。 [caption id"attachment_758" a…

mariadb允许远程访问权限

允许远程访问权限&#xff1a; GRANT ALL PRIVILEGES ON *.* TO root%IDENTIFIED BY 你的密码 WITH GRANT OPTION;

关于_WIN32_WINNT的含义

From: http://blog.csdn.net/gzzheyi/article/details/7190143 在使用一些新版本的API&#xff0c;或者控件的新特性&#xff08;比如新版的ComCtl32.dll&#xff09;的时候,你可能会得到“error C2065: undeclared identifier.“这个错误。原因是这些功能是依赖于你的操作系统…

linux 下oracle基于raw扩充表空间步骤

数据中基于RAW格式的表空间扩容。以下是详细步骤&#xff1a;查看已有裸设备<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />#cd /dev/raw#ls -rtl查看之前裸设备大小情况/查看之前lv大小#blockdev --getsize /dev/raw/raw37204…

uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

方法1.uni-app登录加获取手机号解密—直接看此篇即可解决 微信小程序获取手机号注意点&#xff1a; 1.需要先登录&#xff0c;微信小程序登录看这篇 2.手机号获取到时加密的&#xff0c;需要后端解密或者前端自己解密&#xff08;解密时候就会用到登录得到的session_key&#…

js reduce数组循环相加x+y

var num [1,2,3]var dd num.reduce((x, y) > {return x y})

MinGW - Minimalist GNU for Windows

From: http://sourceforge.jp/projects/mingw/releases/ RSSDownload List Review Average 4.252 Reviews5 Stars 394 Stars 23 Stars 22 Stars 21 Star 7Your ratingReview this project项目描述 MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境&#xff0c;它是…

Swift 3.0 on Ubuntu 15.10

一、安装swift 3.0 1. 下载 https://swift.org/download/ 找到swift-3.0 ubuntu 15.10版本下载&#xff1a; https://swift.org/builds/swift-3.0-preview-1/ubuntu1510/swift-3.0-preview-1/swift-3.0-preview-1-ubuntu15.10.tar.gz 2. 解压文件&#xff0c;然后移动改名到/op…

解决uni-app官方弹框popup关闭不了问题;/pages/extUI/popup/popup;uni-app弹框popup打开调用事件。unin-app弹框封装;

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716165216781.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lfYW1fYV9kaXY,size_16,color_FFFFFF,t_70)官方uni-app的弹框popup模板问题: 官方的弹框示…

uni-app自定义tabBar;uni-app小程序自定义tabBar;uni-app小程序修改中间tabBar导航栏大小;uni-app中间导航栏凸起;uni-app修改底部导航栏

需求&#xff1a;要求小程序&#xff0c;中间的tabBar自定义凸起或者图标变大&#xff1b; 问题&#xff1a;查看uni-app的tabBar文档可知&#xff0c;小程序是不支持midButton的&#xff1b; 解决思路&#xff1a;隐藏uni-app原有的tabBar&#xff0c;然后换成自己手写的导航…

jq localStorage

$(function () {if(!window.localStorage){alert("浏览器不支持localstorage");return false;}else{var storagewindow.localStorage;$(#headerA li).eq(2).addClass(active)}})

c++中BOOL和bool的区别

From: http://blog.csdn.net/zhongguoren666/article/details/8472805 一&#xff1a;在网上找到了BOOL和bool的区别&#xff1a; 1、类型不同 BOOL为int型 bool为布尔型 2、长度不同 bool只有一个字节 BOOL长度视实际环境来定&#xff0c;一般可认为是4个字节 3、取值不同 bo…

常见端口列表

常见端口列表TCP端口7 回显9 丢弃11 在线用户13 时间服务15 网络状态17 每日引用18 消息发送19 字符发生器20 ftp数据21 文件传输22 SSH端口23 远程终端25 发送邮件31 Masters Paradise木马37 时间39 资源定位协议41 DeepThroat木马42 WINS 主机名服务43 Wh…

[JavaScript] DOM操作技术

1. 动态脚本使用<script>元素可以向页面中插入JavaScript代码&#xff0c;一种方式是通过src属性包含外部文件&#xff0c;另一种方式是用这个元素本身来包含代码。动态脚本指在页面加载时不存在&#xff0c;但将来某时通过修改DOM动态添加的脚本。动态加载的外部JavaScr…

uni-app小程序 点击页面滚动到指定位置

uni.pageScrollTo({scrollTop: 0,duration: 300,})

mysql Connector C/C++ 多线程封装

From: http://blog.csdn.net/educast/article/details/14163519 在网上找了好久&#xff0c;有很多封装&#xff0c;但是感觉对多线程处理的不多&#xff0c;都不是很理想。封装完的第一个版本&#xff0c;想法比较简单&#xff0c;使用一个单例模式&#xff0c;对应一个连接&a…

工业控制系统专业术语(不断完善中)

1、DCS &#xff08;Distributed Control System&#xff09;分布式控制系统。主要应用于石油、化工、电力等。2、SCADA (Supervisory Control And Data Acquisition)数据采集与监控&#xff0c;广泛用于电力系统、电气化铁道、风力发电。3、PLC&#xff08; Programmable Logi…

uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;

uni-app小程序图片使用有image标签和background-image背景图两种方式&#xff1a; 下有获取本地图片的网络地址方式&#xff1a;见第四步 一、方式一&#xff1a;使用image标签引入&#xff1a; uni-app官方image 1.官方文档说&#xff1a;src 仅支持相对路径、绝对路径&…

微商小程序加人加粉推广平台二维码

微商加人推广平台丨微商加粉推广平台丨微商拼团丨微商产品推广。

基于MysqlConnector/C++的数据库连接池的实现

From: http://blog.csdn.net/educast/article/details/14164097 1.连接池的介绍&#xff1a; 1.1应用背景&#xff1a; 一般的应用程序都会访问到数据库&#xff0c;在程序访问数据库的时候&#xff0c;每一次数据访问请求都必须经过下面几个步骤&#xff1a;建立数据库连接&a…