无需关注微信公众号破解openwrite验证

前言

在网上查看很多博主的个人博客的文章的时候,要查看全文的时候需要关注博主的微信公众号获取验证码才行,以前自己还是老老实实的关注,但是发现关注了之后几乎没有技术文章,而是一次又一次发软广,不是卖课就是各种水文,于是自己注册了一个openwrite的帐号上去看原理,发现获取验证码就是一个指定的接口,于是分享给大家,如果实在不想关注,可以采用我的方法。

步骤

方法一:

比如下面我下面截图的某个文章,查看全文需要关注微信公众号发指定文字才能获取。
在这里插入图片描述
我们直接获取验证码。规则如下:
https://readmore.openwrite.cn/code/generate?blogId= 这里加上文章的blogId,如果获取请继续看。

我们直接右击需要验证码查看文章的源代码,搜索 openwrite 关键字。复制blogId即可,如下图:
在这里插入图片描述

在这里插入图片描述

然后最后的参数就是:打开的页面就只有有验证码了。输入即可。
https://readmore.openwrite.cn/code/generate?blogId=19939-1604651583181-390
在这里插入图片描述

方法二:

下载油猴脚本 绕过openwrite公众号导流
自动完成跳过验证码。

完结!

<think> 我们参考用户提供的引用和需求: 引用[3]提到了微信小程序的快速登录按钮:使用`<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">`来触发手机号快速验证。 需求是:第二次登录时不调用这个手机号验证组件。 解决方案核心思路: 1. 首次登录成功后,将用户登录状态和手机号信息存储在本地(例如使用`wx.setStorageSync`)。 2. 第二次登录时,检查本地存储中是否存在有效的登录状态和手机号信息。如果存在,则跳过手机号验证,直接使用存储的信息登录。 3. 需要考虑登录状态的有效期,比如设置一个合理的过期时间(如7天),过期后需要重新验证。 具体步骤: ### 1. 首次登录处理 当用户第一次登录时,通过手机号快速验证组件获取手机号,然后调用后端接口进行登录。登录成功后,将登录状态、手机号以及登录时间存储在本地。 示例代码: ```javascript // 页面js Page({ // 绑定getPhoneNumber事件 getPhoneNumber(e) { if (e.detail.code) { // 将code发送到后端,后端通过code换取用户手机号 wx.request({ url: 'https://your-server.com/login', method: 'POST', data: { code: e.detail.code }, success: (res) => { if (res.data.success) { // 登录成功,存储登录状态 wx.setStorageSync('isLogged', true); wx.setStorageSync('phoneNumber', res.data.phone); // 存储手机号 wx.setStorageSync('lastLoginTime', Date.now()); // 存储登录时间 // 跳转到首页 wx.reLaunch({ url: '/pages/index/index' }); } } }) } else { // 用户拒绝了授权或其他错误 console.log('获取手机号失败', e.detail); } } }) ``` ### 2. 第二次登录检查 在应用启动时(如`app.js`的`onLaunch`)或登录页面加载时,检查本地存储的登录状态是否在有效期内。 示例代码: ```javascript // app.js App({ onLaunch() { const isLogged = wx.getStorageSync('isLogged'); const lastLoginTime = wx.getStorageSync('lastLoginTime'); const expireTime = 7 * 24 * 3600 * 1000; // 7天有效期 if (isLogged && (Date.now() - lastLoginTime < expireTime)) { // 跳过登录页,直接进入首页 wx.reLaunch({ url: '/pages/index/index' }); } else { // 清除过期状态 wx.removeStorageSync('isLogged'); wx.removeStorageSync('phoneNumber'); wx.removeStorageSync('lastLoginTime'); // 停留在登录页 } } }); ``` ### 3. 登录页面处理 在登录页面的`onLoad`或`onShow`中,同样可以检查登录状态,如果已登录则跳转。 示例代码: ```javascript // 登录页面login.js Page({ onShow() { const isLogged = wx.getStorageSync('isLogged'); const lastLoginTime = wx.getStorageSync('lastLoginTime'); const expireTime = 7 * 24 * 3600 * 1000; if (isLogged && (Date.now() - lastLoginTime < expireTime)) { wx.reLaunch({ url: '/pages/index/index' }); } } }); ``` ### 4. 退出登录处理 提供退出登录功能,清除存储的登录状态。 ```javascript // 退出登录 logout() { wx.removeStorageSync('isLogged'); wx.removeStorageSync('phoneNumber'); wx.removeStorageSync('lastLoginTime'); // 跳转到登录页 wx.reLaunch({ url: '/pages/login/login' }); } ``` ### 注意事项 1. **安全考虑**:本地存储的信息容易被篡改,因此不能作为绝对信任的依据。在向后端发起请求时,应该使用登录接口返回的token进行身份验证,而不是直接使用本地存储的手机号。手机号存储在本地仅用于展示,关键操作仍需通过token验证。 2. **token机制**:首次登录成功后,后端应返回一个token,前端存储这个token,并在后续请求中携带。后端根据token验证用户身份。 3. **会话管理**:微信小程序还提供了`wx.checkSession`来检查session_key是否过期,如果过期则需要重新登录。 因此,我们可以将方案优化为: - 首次登录:获取手机号,同时获取后端返回的token。 - 存储token和过期时间(后端可以返回过期时间戳)。 - 下次启动时,检查token是否存在且未过期(同时可以用`wx.checkSession`检查微信的会话是否有效)。 调整后的代码: **首次登录成功处理:** ```javascript wx.setStorageSync('token', res.data.token); // 存储token wx.setStorageSync('tokenExpire', res.data.expireTime); // 存储token过期时间戳 ``` **检查登录状态:** ```javascript // 检查登录状态 function checkLogin() { const token = wx.getStorageSync('token'); const expireTime = wx.getStorageSync('tokenExpire'); if (token && expireTime > Date.now()) { // token有效,检查微信会话 wx.checkSession({ success: () => { // 会话未过期,无需重新登录 return true; }, fail: () => { // 会话已过期,需要重新登录 clearLoginState(); return false; } }); } else { return false; } } ``` 这样,我们结合了微信的会话管理和自定义token过期时间,更加安全可靠。 综上,第二次登录不调用手机号验证组件的核心在于利用本地存储记录登录状态,并在有效期内跳过验证。同时,为了安全,需要配合后端token验证和微信会话检查。 引用说明:我们参考了引用[3]中微信小程序通过`getPhoneNumber`获取手机号快速登录的方式,并在此基础上增加了状态存储和检查的逻辑[^3]。 </think>### 微信手机号快速验证组件第二次登录不调用的解决方案 要实现第二次登录跳过手机号验证组件,核心是通过本地状态管理+微信开放能力组合实现。以下是完整实现方案: #### 1. 登录状态检测机制 ```javascript // app.js App({ onLaunch() { const loginRecord = wx.getStorageSync('loginRecord') || {} const now = Date.now() // 检查7天内是否登录过 if (loginRecord.lastLogin && (now - loginRecord.lastLogin < 604800000)) { this.globalData.autoLogin = true wx.reLaunch({ url: '/pages/home/index' }) } } }) ``` #### 2. 登录流程优化 ```javascript // login.js Page({ onLoad() { if (getApp().globalData.autoLogin) { this.directLogin() // 跳过验证直接登录 } }, // 首次登录成功处理 handleLoginSuccess(res) { wx.setStorageSync('loginRecord', { lastLogin: Date.now(), phone: res.detail.phoneNumber }) }, // 二次登录直接调用 directLogin() { wx.login({ success: (res) => { wx.request({ url: 'https://api.example.com/auto-login', data: { code: res.code }, success: (res) => { // 获取服务端返回的用户信息 } }) } }) } }) ``` #### 3. 微信快速登录组件控制 ```html <!-- login.wxml --> <block wx:if="{{!autoLogin}}"> <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> 手机号快速登录 </button> </block> ``` #### 4. 服务端配合实现 ```javascript // 服务端自动登录接口 router.post('/auto-login', (req, res) => { const { code } = req.body const wechatData = wechatApi.code2Session(code) // 检查是否注册过 const user = db.query(`SELECT * FROM users WHERE openid = ?`, [wechatData.openid]) if (user && user.phone) { // 生成新token返回 res.json({ token: generateToken(user.id) }) } else { res.status(401).json({ code: 'REQUIRE_PHONE_VERIFY' }) } }) ``` #### 5. 安全增强措施 ```javascript // 添加会话检查 wx.checkSession({ success: () => { // session_key 未过期 }, fail: () => { // session_key 已过期,需要重新执行登录 wx.removeStorageSync('loginRecord') } }) ``` ### 实现流程图 ```mermaid graph TD A[启动小程序] --> B{本地有7天内登录记录?} B -->|是| C[静默获取微信code] C --> D[发送code到服务端] D --> E{服务端验证是否注册} E -->|已注册| F[返回token自动登录] E -->|未注册| G[触发手机号验证] B -->|否| G G --> H[用户授权手机号] H --> I[完成登录并存储状态] ``` ### 关键注意事项 1. **数据安全** - 敏感信息需使用`wx.setStorageSync`加密存储[^3] - 服务端应对自动登录请求进行频率限制 2. **用户体验优化** - 添加「记住我」选项控制自动登录行为 ```javascript // 用户选择记住登录 wx.setStorageSync('rememberMe', true) ``` - 首次登录后显示「7天内自动登录」提示 3. **异常处理** - 当服务端返回`REQUIRE_PHONE_VERIFY`时,自动显示验证组件 ```javascript directLogin() { // ...请求服务端 fail: (err) => { if (err.code === 'REQUIRE_PHONE_VERIFY') { this.setData({ showVerify: true }) } } } ``` 4. **兼容性方案** - 针对未授权微信登录的用户提供备用方案: ```html <button wx:else open-type="getPhoneNumber"> 手机验证码登录 </button> ``` [^3]: 微信官方推荐使用开放能力实现快速登录,详见小程序开发文档
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值