公众号授权登录h5

8 篇文章 1 订阅

公众号授权登录h5

.

前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时候就没了。

.

步骤

  • 1、申请测试号
  • 2、按照下列步骤获取用户信息

网页授权流程分为四步:

  • 1、引导用户进入授权页面同意授权,获取code
  • 2、通过code换取网页授权access_token(与基础支持中的access_token不同)
  • 3、如果需要,开发者可以刷新网页授权access_token,避免过期
  • 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

官方文档:

微信网页授权

测试号申请

申请测试号流程

  • 1、写入可访问的url和随机的token
  • 2、写入域名

在这里插入图片描述

  • 3、网页授权获取用户基本信息,写入项目本地的ip和端口号

在这里插入图片描述
在这里插入图片描述

  • 4、微信扫码关注测试号

到此,测试号申请完成。

登录获取用户信息

  • 1、获取code
const login = () => {
    console.log('登录');
    const appid = 'wx79517596162e14c9';
    const callback_url = encodeURIComponent(window.location.href); // 获取当前地址,跳转至以下腾讯地址会携带code重定向到该地址
    window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${callback_url}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
  }

注意,这里只可以在微信环境跳转,非微信环境会出现如下提示

在这里插入图片描述
.

你在微信里打开链接就可以了,然后会出现如下提示,点击同意就可以获取到code

在这里插入图片描述

code以如下形式出现在地址栏

在这里插入图片描述

  • 2、根据code,获取access_token
useEffect(() => {
    // 解析查询参数
    const searchParams = new URLSearchParams(location.search);
    const code = searchParams.get('code');
    console.log(888);
    
    // 处理code参数
    if (code) {
      // 在这里处理获取到的code
      console.log('Code:', code);
      const appId = '测试号的appid';
      const secret = '测试号的secret '
      getAccessToken({
        code, appId, secret,
      }).then(res => {
        const { access_token, refresh_token, openid } = res
        // alert(access_token+'+'+refresh_token+'+'+openid);
        getUserInfo(access_token, openid)
      })
    }
  }, []);

响应回来的结果是一个json对象,这里会出现跨域,以下是我的封装

login.ts

// 获取access_token
export function getAccessToken(params:any) {
  return request.get(`/sns/oauth2/access_token?appid=${params.appId}&secret=${params.secret}&code=${params.code}&grant_type=authorization_code`)
}

// 获取用户信息
export function getUserMessage(params:any) {
  return request.get(`/sns/userinfo?access_token=${params.access_token}&openid=${params.access_token}&lang=zh_CN`)
}

在vite.config.ts里代理

server: {
    host: "0.0.0.0",
    proxy: {
      "/sns": {
          target: "https://api.weixin.qq.com",
      }
    },
 },

.
这里有一个报错,就是说你调用了两次code。我是在微信调一次,然后copy地址到浏览器测试就会报错这个。不需要管,打印的话可以使用alert直接在微信环境打印。

errcode : 40163 errmsg : “code been used, rid: 64a38010-390a5cc5-7d864aea”

  • 3、根据access_token获取用户信息
const getUserInfo = (access_token:string, openid:string) => {
    getUserMessage({
      access_token, 
      openid
    }).then(res => {
      const { openid, nickname, headimgUrl } = res;
      alert(nickname+'+'+headimgUrl+'+'+openid)
    })
  }

获取用户信息成功。

一般情况下登录不这样做,因为前端操作token,这样是不安全的,前端获取code,将code传给后端返回token和userInfo。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值