网易云音乐扫码登录

简介

尚硅谷的网易云音乐项目无法登录,因为目前网易修改了接口使用手机号和密码登录的话需要先通过认证才可以,所以目前无法使用手机号登录,只能使用二维码登录,接下来我就教大家如何使用 二维码进行登录

实现步骤

1.获取nodejs接口文件

gitee仓库:nodejs文件点我获取
在这里插入图片描述

  • 会git的小伙伴直接克隆我的仓库即可,这样比较方便,
  • 不会git的小伙伴也没关系,选择下方的下载zip压缩包也是可以的。

2.运行nodejs,让后台跑起来

  1. 打开下载好的文件,先在终端命令行输入npm i 下载依赖(切记不要忘了这步)
  2. 使用npm start 运行即可

3.编写扫码业务(这里大家直接复制我的就可以)

js文件

/*** 作者:白的夜* 日期:2023/8/2* 功能:实现扫码登录功能*/
import request from '../../utils/request'Page({timer: "",//定时器返回值data: {phone: "",    //电话password: "", //密码qrimg: ""     //二维码图片base64},//收集手机号和密码handlerInput(e) {if (e.currentTarget.dataset.type == 'phone') {//防抖处理if (this.timer) clearTimeout(this.timer)this.timer = setTimeout(() => {this.setData({ phone: e.detail.value })}, 1000)}else if (e.currentTarget.dataset.type == 'password') {//防抖处理if (this.timer) clearTimeout(this.timer)this.timer = setTimeout(() => {this.setData({ password: e.detail.value })}, 1000)}},//发送验证码(表单失去焦点触发)async sendCode() {let { phone } = this.dataconst res = await request('/captcha/sent', { phone })if (res.code == 200) {wx.showToast({title: '已发送验证码',})}},//登录按钮async login() {let { phone, password } = this.datalet phoneRegex = /^1(3|4|5|6|7|8|9)\d{9}$/;//校验手机号if (!phone) {return wx.showToast({title: '手机号不能为空',icon: "error"})} else {if (!phoneRegex.test(phone)) {return wx.showToast({title: '手机号格式不对',icon: "error"})}}//校验密码if (!password) {return wx.showToast({title: '密码不能为空',icon: "error"})}//发送登录请求const res = await request('/login/cellphone', { phone, password })if (res == 200) {wx.showToast({title: '登录成功',icon: 'success'})}},//二维码登录async codeLogin() {//第一步:获取key time为时间戳防止请求被缓冲const res = await request('/login/qr/key', { time: Date.now() })if (res.code == 200) {let key = (res.data.unikey);//第二步:根据key发送请求获取二维码图片const qrImgRes = await request('/login/qr/create', { key, qrimg: true, time: Date.now() })if (qrImgRes.code == 200) {//获取到二维码图片this.setData({ qrimg: qrImgRes.data.qrimg })}else {return wx.showToast({title: '图片获取失败',})}//第三步:使用定时器长轮询检测是否登录this.timer = setInterval(async () => {const statusRes = await request('/login/qr/check',{ key, time: Date.now() })if (statusRes.code == 800) {wx.showToast({ title: '二维码已过期' })//清除定时器clearInterval(this.timer);} else if (statusRes.code === 801) {console.log('等待扫码');} else if (statusRes.code === 802) {console.log('等待授权');} else if (statusRes.code === 803) {wx.showToast({title: '登录成功',})//清除定时器clearInterval(this.timer);//存储cookiewx.setStorageSync('cookie', JSON.stringify(statusRes.cookie))//存储账号信息const loginStatus = await request(`/login/status?time=${Date.now()}`, { cookie: statusRes.cookie }, 'POST')if (loginStatus.data.code == 200) {wx.setStorageSync('UserInfo', JSON.stringify(loginStatus.data.profile))}//跳转至主页wx.reLaunch({url: '/pages/mine/mine',//这里换成自己的主页路径})}}, 1000)}},/*监听页面加载*/onLoad(options) { },/*监听页面初次渲染完成*/onReady() { },/*监听页面显示*/onShow() { },/*监听页面隐藏*/onHide() { },/*监听页面卸载*/onUnload() { },/*监听用户下拉动作*/onPullDownRefresh() { },/*页面上拉触底事件的处理函数*/onReachBottom() { },/*用户点击右上角分享*/onShareAppMessage() { }
})

在这里插入图片描述

注意哦这里换成自己主页的路径,在js代码的125行位置

wxss文件

/* pages/login/login.wxss */
.wrapper {position: relative;z-index: 90;padding-bottom: 40rpx;
}.left-top-sign {font-size: 150rpx;color: #f8f8f8;position: relative;left: 0rpx;top: 0rpx;
}.welcome {position: relative;left: 50rpx;top: -90rpx;font-size: 46rpx;color: #555;
}.input-content {box-sizing: border-box;padding: 10rpx 60rpx;
}.input-item {display: flex;flex-direction: column;justify-content: center;padding: 0 30rpx;background: #f8f6fc;height: 130rpx;border-radius: 10px;margin-bottom: 50rpx;
}.input-item:last-child {margin-bottom: 0;
}.input-item .tit {height: 50rpx;line-height: 56rpx;font-size: 30rpx;color: #606266;
}.input-item input {height: 70rpx;font-size: 30rpx;color: #303133;width: 100%;
}.confirm-btn {width: 630rpx !important;height: 76rpx;line-height: 76rpx;border-radius: 50rpx;margin-top: 70rpx;background: #d43c33;color: #fff;font-size: 32rpx;padding: 0;
}.forget-section {font-size: 28rpx;color: #4399fc;text-align: center;margin-top: 40rpx;display: flex;justify-content: center;align-items: center;
}.forget-section text {margin-left: 20rpx;
}.register-section {position: absolute;left: 0;bottom: 50rpx;width: 100%;font-size: 28rpx;color: #606266;text-align: center;
}.register-section text {color: #4399fc;margin-left: 10rpx;
}.qrcode {width: 200rpx;height: 200rpx;position: absolute;bottom: 10%;left: 37%;z-index: 999;
}

wxml文件

<view class="container"><view class="wrapper"><view class="left-top-sign">LOGIN</view><view class="welcome"> 欢迎回来!</view><view class="input-content"><view class="input-item"><text class="tit">手机号码</text><input type="text" placeholder="请输入手机号码" bind:input="handlerInput" data-type="phone" bind:blur="sendCode" /></view><view class="input-item"><text class="tit">密码</text><input type="text" placeholder="请输入密码" bind:input="handlerInput" data-type="password" /></view></view><button class="confirm-btn" bind:tap="login">登录</button><view class="forget-section" bind:tap="codeLogin"><image src="../../static/images/logo.png" style="width: 50rpx;height:50rpx" /><text>二维码登录</text></view></view><view class="register-section"><text> 还没有账号?</text><text style="color: red;">马上注册</text></view><!--二维码登录 --><image src="{{qrimg}}" class="qrcode" wx:if="{{qrimg}}" />
</view>

json文件

{"usingComponents": {},"navigationBarTitleText": "登录"
}

效果图

在这里插入图片描述

注意点

  • 扫码的时候不要用微信扫,用网易云音乐扫一扫
  • cookie我已经帮大家写好了。大家登录成功后cookie自动存储在storage中
  • 执行后续需要登录才能获取到数据的接口时,只需要将cookie以query参数的形式发送给服务器即可。以下是例子
    在这里插入图片描述
    就是这些,有任何其他问题大家在评论区给我留言即可!

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

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

相关文章

【1.4】Java微服务:服务注册和调用(Eureka和Ribbon实现)

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…

排序八卦炉之选择、堆排

文章目录 1.选择排序1.1代码实现1.2复杂度 2.堆排序2.1代码实现2.2复杂度 1.选择排序 1.1代码实现 // 当数据趋于有序或随机(可能部分有序) 插排更有优势 O(N)~O(N^2) //选择排序&#xff1a;O&#xff08;N^2&#xff09; O(N^2)~O(N^2) void …

【shell】获取ping的时延数据并分析网络情况及常用命令学习

文章目录 获取ping的时延数据并分析网络情况|、||、&、&&辨析teetailkillall 获取ping的时延数据并分析网络情况 网络情况经常让我们头疼&#xff0c;每次都需要手动在终端ping太麻烦了&#xff0c;不如写个脚本ping并将数据带上时间戳存入文件&#xff0c;然后也…

如何克服看到别人优于自己而感到的焦虑和迷茫?

文章目录 每日一句正能量前言简述自己的感受怎么做如何调整自己的心态后记 每日一句正能量 行动是至于恐惧的良药&#xff0c;而犹豫、拖延&#xff0c;将不断滋养恐惧。 前言 虽然清楚知识需要靠时间沉淀&#xff0c;但在看到自己做不出来的题别人会做&#xff0c;自己写不出的…

软件测试缺陷报告

缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report&#xff08;SBR&#xff09;或软件问题报告Software Problem Report&#xff08;SPR&#xff09; 作用&#xff1a;缺陷报告是软件测试人员的工作成果之一&#xff0c;体现软件测试的价值缺陷报…

Pytorch深度学习-----神经网络之线性层用法

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

<van-empty description=““ /> 滚动条bug

使用 <van-empty description"" /> 时&#xff0c;图片出现了个滚动条&#xff0c;图片可以上下滑动。 代码如下&#xff1a; <block wx:if"{{courseList.length < 0}}"><van-empty description"" /> </block> <…

python与深度学习(十):CNN和cifar10二

目录 1. 说明2. cifar10的CNN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测试。首…

主流开源监控系统一览

减少故障有两个层面的意思&#xff0c;一个是做好常态预防&#xff0c;不让故障发生&#xff1b;另一个是如果故障发生&#xff0c;要能尽快止损&#xff0c;减少故障时长。而监控的典型作用&#xff0c;就是帮助我们发现及定位故障&#xff0c;这两个环节对于减少故障时长至关…

LeetCode面向运气之Javascript—第2500题-删除每行中的最大值-93.51%

LeetCode第2500题-删除每行中的最大值 题目要求 一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其中任何一个。 将删除元素中的最…

Kafka的零拷贝

传统的IO模型 如果要把磁盘中的某个文件发送到远程服务器需要经历以下几个步骤 (1) 从磁盘中读取文件的内容&#xff0c;然后拷贝到内核缓冲区 (2) CPU把内核缓冲区的数据赋值到用户空间的缓冲区 (3) 在用户程序中调用write方法&#xff0c;把用户缓冲区的数据拷贝到内核下面…

面向对象程序三大特性一:多态(超详细)

目录 1.重写 1.1基本语法规则 1.2规则深化 1.3重写与重载的区别 2.向上转型 2.1简单介绍 2.3向上转型的作用 3.向下转型 3.1介绍 3.2instanceof 基本介绍 4.多态 4.1多态实现条件 4.2避免在构造方法中调用重写的方法 1.重写 重写 (override) &#xff1a;也称为覆…

容器技术:Docker搭建(通俗易懂)

目录 Docker搭建环境准备Docker安装1、查看服务器是否安装Docker2、卸载Docker3、安装Dokcer依赖环境4、配置Docker国内阿里云镜像5、安装Docker6、查看Docker信息7、配置阿里云镜像加速8、镜像安装10、运行实例11、查看实例状态12、测试 Docker命令集合 Docker搭建 环境准备 …

剑指Offer 05.替换空格

剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码&#xff08;容易想到的&#xff09;利用库函数的方法题解&#xff08;时间复杂度更低&#xff09;面试&#xff1a;为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码&#xff08;…

Ubuntu-文件和目录相关命令

&#x1f52e;linux的文件系统结构 ⛳目录结构及目录路径 &#x1f9e9;文件系统层次结构标准FHS Filesystem Hierarchy Standard(文件系统层次结构标准&#xff09; Linux是开源的软件&#xff0c;各Linux发行机构都可以按照自己的需求对文件系统进行裁剪&#xff0c;所以众多…

【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

文章标题 简介&#xff1a;一&#xff0c;元组&#xff1a;1&#xff0c;定义元组&#xff1a;2&#xff0c;访问元组元素&#xff1a;3&#xff0c;元组解构&#xff1a;4&#xff0c;元组在函数中的应用&#xff1a; 二&#xff0c;数组&#xff1a;1&#xff0c;数组的声明和…

PyTorch - GPU入门教程1

1. 安装GPU版本的PyTorch 登录PyTorch官网https://pytorch.org/&#xff0c;下载对应CUDA版本的PyTorch【不能直接pip install&#xff0c;否则安装上的是CPU版本的】 2. 查看GPU信息 &#xff08;1&#xff09;重要信息 !nvidia-smi我的GPU版本很垃圾&#xff0c;本blog仅…

UML/SysML建模工具更新(2023.7)(1-5)有国产工具

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;Visual Paradigm 17.1 更新时间&#xff1a;2023年7月11日 工具简介 很用心的建模工具。支持编写用例规约。支持文本分析和C…

论文阅读-BotPercent: Estimating Twitter Bot Populations from Groups to Crowds

目录 摘要 引言 方法 数据集 BotPercent架构 实验结果 活跃用户中的Bot数量 Bot Population among Comment Sections Bot Participation in Content Moderation Votes Bot Population in Different Countries’ Politics 论文链接&#xff1a;https://arxiv.org/pdf/23…

基于SpringCloud+Vue的分布式架构网上商城系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…