问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

微信小程序怎么授权登录

发布网友 发布时间:2022-04-19 13:38

我来回答

3个回答

懂视网 时间:2022-05-15 02:12

这次给大家带来从零开始操作微信小程序登录鉴权,从零开始操作微信小程序登录鉴权的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

为了方便小程序应用使用微信登录态进行授权登录,微信小程序提供了登录授权的开放接口。乍一看文档,感觉文档上讲的非常有道理,但是实现起来又真的是摸不着头脑,不知道如何管理和维护登录态。本文就来手把手的教会大家在业务里如何接入和维护微信登录态,下面话不多说了,来一起看看详细的介绍吧。

接入流程

这里官方文档上的流程图已经足够清晰,我们直接就该图展开详述和补充。

首先大家看到这张图,肯定会注意到小程序进行通信交互的不止是小程序前端和我们自己的服务端,微信第三方服务端也参与其中,那么微信服务端在其中扮演着怎样的角色呢?我们一起来串一遍登录鉴权的流程就明白了。

1. 调用wx.login生成code

wx.login()这个API的作用就是为当前用户生成一个临时的登录凭证,这个临时登录凭证的有效期只有五分钟。我们拿到这个登录凭证后就可以进行下一步操作:获取 openid 和 session_key

wx.login({
 success: function(loginRes) {
 if (loginRes.code) {
 // example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth
 }
 }
});

2. 获取openid和session_key

我们先来介绍下openid,用过公众号的童鞋应该对这个标识都不陌生了,在公众平台里,用来标识每个用户在订阅号、服务号、小程序这三种不同应用的唯一标识,也就是说每个用户在每个应用的openid都是不一致的,所以在小程序里,我们可以用openid来标识用户的唯一性。

那么session_key是用来干嘛的呢?有了用户标识,我们就需要让该用户进行登录,那么 session_key 就保证了当前用户进行会话操作的有效性,这个session_key是微信服务端给我们派发的。也就是说,我们可以用这个标识来间接地维护我们小程序用户的登录态,那么这个session_key是怎么拿到的呢?我们需要在自己的服务端请求微信提供的第三方接口 https://api.weixin.qq.com/sns/jscode2session ,这个接口需要带上四个参数字段:

参数
appid小程序的appid
secret小程序的secret
js_code前面调用wx.login派发的code
grant_type'authorization_code'

从这几个参数,我们可以看出,要请求这个接口必须先调用wx.login()来获取到用户当前会话的code。那么为什么我们要在服务端来请求这个接口呢?其实是出于安全性的考量,如果我们在前端通过request调用此接口,就不可避免的需要将我们小程序的appid和小程序的secret暴露在外部,同时也将微信服务端下发的session_key暴露给“有心之人”,这就给我们的业务安全带来极大的风险。除了需要在服务端进行session_key的获取,我们还需要注意两点:

  1. session_key和微信派发的code是一一对应的,同一code只能换取一次session_key。每次调用wx.login() ,都会下发一个新的code和对应的session_key,为了保证用户体验和登录态的有效性,开发者需要清楚用户需要重新登录时才去调用wx.login()

  2. session_key是有失效性的,即便是不调用wx.login,session_key也会过期,过期时间跟用户使用小程序的频率成正相关,但具体的时间长短开发者和用户都是获取不到的

function getSessionKey (code, appid, appSecret) {
 var opt = {
 method: 'GET',
 url: 'https://api.weixin.qq.com/sns/jscode2session',
 params: {
 appid: appid,
 secret: appSecret,
 js_code: code,
 grant_type: 'authorization_code'
 }
 };
 return http(opt).then(function (response) {
 var data = response.data;
 if (!data.openid || !data.session_key || data.errcode) {
 return {
 result: -2,
 errmsg: data.errmsg || '返回数据字段不完整'
 }
 } else {
 return data
 }
 });
}

3. 生成3rd_session

前面说过通过 session_key 来“间接”地维护登录态,所谓间接,也就是我们需要 自己维护用户的登录态信息 ,这里也是考虑到安全性因素,如果直接使用微信服务端派发的session_key来作为业务方的登录态使用,会被“有心之人”用来获取用户的敏感信息,比如wx.getUserInfo()这个接口呢,就需要session_key来配合解密微信用户的敏感信息。

那么我们如果生成自己的登录态标识呢,这里可以使用几种常见的不可逆的哈希算法,比如md5、sha1等,将生成后的登录态标识(这里我们统称为'skey')返回给前端,并在前端维护这份登录态标识(一般是存入storage)。而在服务端呢,我们会把生成的skey存在用户对应的数据表中,前端通过传递skey来存取用户的信息。

可以看到这里我们使用了sha1算法来生成了一个skey:

const crypto = require('crypto');
return getSessionKey(code, appid, secret)
 .then(resData => {
 // 选择加密算法生成自己的登录态标识
 const { session_key } = resData;
 const skey = encryptSha1(session_key);
 });
 
function encryptSha1(data) {
 return crypto.createHash('sha1').update(data, 'utf8').digest('hex')
}

4. checkSession

前面我们将skey存入前端的storage里,每次进行用户数据请求时会带上skey,那么如果此时session_key过期呢?所以我们需要调用到wx.checkSession()这个API来校验当前session_key是否已经过期,这个API并不需要传入任何有关session_key的信息参数,而是微信小程序自己去调自己的服务来查询用户最近一次生成的session_key是否过期。如果当前session_key过期,就让用户来重新登录,更新session_key,并将最新的skey存入用户数据表中。

checkSession这个步骤呢,我们一般是放在小程序启动时就校验登录态的逻辑处,这里贴个校验登录态的流程图:

下面代码即校验登录态的简单流程:

let loginFlag = wx.getStorageSync('skey');
if (loginFlag) {
 // 检查 session_key 是否过期
 wx.checkSession({
 // session_key 有效(未过期)
 success: function() {
 // 业务逻辑处理
 },
 
 // session_key 过期
 fail: function() {
 // session_key过期,重新登录
 doLogin();
 }
 });
) else {
 // 无skey,作为首次登录
 doLogin();
}

5. 支持emoji表情存储

如果需要将用户微信名存入数据表中,那么就确认数据表及数据列的编码格式。因为用户微信名可能会包含emoji图标,而常用的UTF8编码只支持1-3个字节,emoji图标刚好是4个字节的编码进行存储。

这里有两种方式(以mysql为例):

1.设置存储字符集

在mysql5.5.3版本后,支持将数据库及数据表和数据列的字符集设置为 utf8mb4 ,因此可在 /etc/my.cnf 设置默认字符集编码及服务端编码格式

// my.cnf

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

设置完默认字符集编码及服务端字符集编码,如果是对已经存在的表和字段进行编码转换,需要执行下面几个步骤:

设置数据库字符集为 utf8mb4

ALTER DATABASE 数据库名称 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

设置数据表字符集为 utf8mb4

ALTER TABLE 数据表名称 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

设置数据列字段字符集为 utf8mb4

ALTER TABLE 数据表名称 CHANGE 字段列名称 VARCHAR(n) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这里的 COLLATE 指的是排序字符集,也就是用来对存储的字符进行排序和比较的, utf8mb4 常用的collation有两种: utf8mb4_unicode_ci 和 utf8mb4_general_ci ,一般建议使用 utf8mb4_unicode_ci ,因为它是基于标准的 Unicode Collation Algorithm(UCA) 来排序的,可以在各种语言进行精确排序。这两种排序方式的具体区别可以参考: What's the difference between utf8_general_ci and utf8_unicode_ci

2.通过使用sequelize对emoji字符进行编码入库,使用时再进行解码

这里是sequelize的配置,可参考 Sequelize文档

{
 dialect: 'mysql', // 数据库类型
 dialectOptions: { 
 charset: 'utf8mb4',
 collate: "utf8mb4_unicode_ci"
 },
}

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

如何使用vue-cli模块打包

Vue怎样进行局部作用域 & 模块化

热心网友 时间:2022-05-14 23:20

从你的描述来看,微信小程序想要授权登录的话,建议打开该小程序,然后点击登录,然后选择微信授权登录。

热心网友 时间:2022-05-15 00:38

付费内容限时免费查看回答①解除授权,②重新授权。请在微信公众平台登录您的微信小程序帐号,在微信小程序后台,将小程序中所有第三方平台都进行解除授权操作

请问提示的是什么呢

如何设置微信小程序的授权?

要设置微信小程序的授权,用户需要进入微信开放平台,然后在“设置-第三方设置”里面对相应的应用进行授权管理。详细步骤如下:1. 登录微信开放平台:首先,用户需要使用自己的微信开发者帐号登录微信开放平台。2. 找到“设置”选项:登录后,在平台的首页或者个人主页里面,用户可以找到...

微信小程序怎么重新授权 微信小程序怎么重新授权登录

首先打开【微信】,点开界面下方的【发现】,在众多选项中选择【小程序】,选中界面右上角的【搜索】,搜索想要重新授权的小程序,点击进入小程序,选择界面右上角的【三点】图标;在弹出的窗口中,选中【设置】,点开【用户信息】,选择【授权用户信息】旁边的按钮,使其由绿色变为灰色,点击【关闭授...

微信怎么授权小程序

1. 打开微信并找到你需要授权的小程序。2. 点击右上角的“...”按钮,选择“添加到桌面”或“打开”。3. 如果你是第一次打开该小程序,它可能会要求你进行授权。在小程序弹出的授权页面中,点击“允许”以授权你的微信账户信息。4. 授权成功后,小程序...

微信小程序怎么授权 微信小程序如何授权

1、首先在第三方平台后台设置完小程序的内容后,点击左边导航栏中的“对接小程序”。点击“授权小程序”,出现二维码弹窗。2、用小程序绑定的管理员微信号扫描二维码。注意,在这步之前,一定要先在微信公众平台上注册好小程序,只有小程序的管理员可以扫码授权。3、授权成功后,回到“对接小程序”的页面...

怎样使用应用宝授权微信小程序登录

1. 打开微信小程序的开发者工具,进入小程序的设置页面,找到“开发设置”中的“AppID”,复制该ID。2. 在应用宝开发者中心中创建一个新的应用,并在应用设置中找到“微信登录”选项,点击“开启”。3. 在“微信登录”页面中,填写小程序的AppID,并设置授权回调域名。4. 在小程序中添加“微信登录”...

小程序授权之后如何登录呢?

1、打开微信后下滑主界面 2、点击需要授权的小程序(应用),这里找不到可以搜索小程序。我以【国务院客户端】小程序为例 3、进入小程序之后点击右下角【个人中心】4、点击【微信用户】,有的应用页面会显示登录字样 5、出现相关弹窗,需要获取我们的微信昵称和头像,点击【允许】。当然了,也可以使用...

微信小程序可以授权登录吗?

在用户首次打开小程序时,可以提示用户使用手机号授权功能进行登录。如果用户同意授权,小程序就可以获取到用户的手机号码,并将其保存为用户账号。这样,在后续的购物过程中,用户就不需要再次输入手机号码进行验证了,只需要通过微信授权即可快速登录。另外,微信小程序手机号授权功能还具有很高的安全性。由于...

uniapp微信小程序微信登录一键授权

打开设置界面用户可以在小程序设置界面(「右上角」-「关于」-「右上角」-「设置」)中控制对该小程序的授权状态。开发者可以调用wx.openSetting打开设置界面,引导用户开启授权。提前发起授权请求开发者可以使用wx.authorize在调用需授权API之前,提前向用户发起授权请求 <!--微信授权登录全程代码实现--><...

小程序怎么重新授权登录

根据百度经验网查询,小程序重新授权登录一般应删除当前信息,需要9个步骤实现,下面是具体操作介绍:1.打开微信,点击发现。2.点击列表最下方的小程序。3.点击需要重新授权的小程序。4.进入小程序后,点击右上角的更多图标。5.点击新弹窗中的设置。6.点击新页面中的小程序已获取的信息。7.点击新页面...

微信小程序怎么重新授权 微信小程序如何重新授权

步骤1、打开微信后下拉微信主界面 步骤2、点击需要重新授权的小程序,如果此下拉页面没有,可以点击更多,或者搜索,找到需要的小程序 步骤3、进入小程序之后点击右上角【...】步骤4、点击【设置】步骤5、点击【小程序已获取的信息】步骤6、点击【管理】步骤7、点击各项信息前面的红色带白线的标识,再...

微信如何授权第三方登录 微信小程序授权在哪里设置 微信小程序靠什么授权 微信小程序需要授权怎么设置 如何授权微信小程序登录权限 微信小程序第一次登录授权 微信小程序云开发登录授权 个人微信小程序怎么申请授权 php微信小程序授权登录
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求免费手机照片恢复软件 不要扫描到最后要花钱注册的 有不要花钱的能恢复照片的嘛 如何不花钱恢复存储卡上的照片 相机照片误删如何恢复而不花钱? 微星X470 GAMING PRO CARBON,这个主板京东买是不是还送970EVO固态?_百 ... 痛风饮食误区之水果篇 仙剑3窗口化为什么有一边的鼠标点不到 ...进本开怪就卡屏,有时候白屏并且鼠标失灵了,电脑重装游戏、插件重装... 轩辕剑3云和山的彼端 我的鼠标为什么不能用? 剑三游戏里鼠标不能滚屏画面大小,是怎么回事 微信小程序判断用户登录的问题 如何重新登录微信小程序 学达云的微信小程序如何登陆 别人访问我的微信小程序,需要登陆我的微信吗? macbook pro md102和x72 苹果macbook pro md102 是什么时候发售的 手机淘宝订单回收站在哪 删除的淘宝订单还能在哪里看见 淘宝网中的订单回收站在网页中的什么位置啊,我找不... 怎么把手机软件移到优盘里 怎么将手机里面的文件转移到u盘里 怎样把手机下载的视频传到u盘里 怎么将手机微信中文件转到U盘? 怎么把手机里面的东西移到U盘里面 怎么把QQ空间弄得很好看? 你们觉得QQ会员气泡哪个最好看? 怎样才可以让qq主页变得好看 怎么把自己的QQ变得很洋气!! 怎样才能制作出好看的QQ版面 如何免费制作漂亮的QQ空间 微信小程序不登陆就不让进 小程序如何在其他页面判断是否登录 为什么微信小程序登陆的时候一直是请稍后,网络没... 微信小程序怎么登录?我的公众号和小程序都是一个... 微信小程序怎么记录登录用户操作信息? 创建微信小程序账号要先在电脑上登录微信吗 微信小程序只能用微信自身的登录吗 APPLE MACBOOK pro MD101和 MD102具体的区别在哪里呀? 电脑上能设闹钟吗? 电脑上怎么设置闹铃 电脑如何设闹铃 电脑上能设置闹钟吗? 电脑里可不可以调闹钟的?? 电脑可以设置闹钟吗? 电脑可以设置闹铃吗 电脑有闹钟的功能吗? 电脑上可以开闹钟吗? 苹果md102配置是什么的,详细点 APPLE MACBOOK pro MD101和 MD102具体的区别在哪里呀? 如何使用PS制作卡通头像?