当前位置: 首页 > news >正文

wordpress网站用token登入开发过程

生成跳转token
示例:
 

function generate_login_token($user_id, $secret_key) {$payload = ['user_id' => $user_id,'timestamp' => time(),];$payload_json = json_encode($payload);$signature = hash_hmac('sha256', $payload_json, $secret_key);return base64_encode($payload_json) . '.' . $signature;
}// Example usage
$user_id = 123; // 要登录的 WordPress 用户 ID
$secret_key = 'your_secret_key'; // 自定义的安全密钥
$token = generate_login_token($user_id, $secret_key);
echo $token;

在 WordPress 中验证 Token 和登录
在 WordPress 中创建一个自定义的 API 接口,用于处理 Token 验证和登录:

示例代码
将以下代码添加到主题的 functions.php 文件中:

add_action('rest_api_init', function() {register_rest_route('custom/v1', '/login', ['methods' => 'POST','callback' => 'custom_token_login','permission_callback' => '__return_true', // 如果需要限制访问,可以改成自定义的权限检查函数]);
});function custom_token_login(WP_REST_Request $request) {$token = $request->get_param('token');$secret_key = 'your_secret_key'; // 必须与生成 Token 的密钥一致if (!$token) {return new WP_Error('no_token', 'Token is missing', ['status' => 400]);}// 解析 Tokenlist($payload_base64, $signature) = explode('.', $token);$payload_json = base64_decode($payload_base64);$payload = json_decode($payload_json, true);// 验证 Token 签名$valid_signature = hash_hmac('sha256', $payload_json, $secret_key);if ($signature !== $valid_signature) {return new WP_Error('invalid_signature', 'Invalid token signature', ['status' => 401]);}// 检查 Token 是否过期(例如 10 分钟)if (time() - $payload['timestamp'] > 600) {return new WP_Error('token_expired', 'Token has expired', ['status' => 401]);}// 获取用户并登录$user = get_user_by('id', $payload['user_id']);if (!$user) {return new WP_Error('invalid_user', 'User does not exist', ['status' => 404]);}// 登录用户wp_set_current_user($user->ID);wp_set_auth_cookie($user->ID);//header("Location:/wp-admin");return ['success' => true, 'message' => 'Login successful'];
}

跳转链接类似这样: https://your-domain.com/wp-json/custom/v1/login?token=YOUR_GENERATED_TOKEN

http://www.lryc.cn/news/509841.html

相关文章:

  • Python基础知识回顾
  • C++--------效率和表示
  • 在 Ubuntu 服务器上添加和删除用户
  • 安卓 SystemServer 启动流程
  • 深度分析 es multi_match 中most_fields、best_fields、cross_fields区别
  • 中职计算机网络技术理实一体化实训室建设方案
  • Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
  • 数据结构(Java版)第六期:LinkedList与链表(一)
  • 云边端一体化架构
  • 人工智能之基于阿里云进行人脸特征检测部署
  • 基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享
  • MPLS小实验:利用LDP动态建立LSP
  • C++ 面向对象编程
  • 我的Serverless实战——引领云计算的下一个十年,附答案
  • 有哪些其他方法可以实现数据一致性验证?
  • vue 基础学习
  • HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务
  • PetaLinux 内核输出信息的获取方式
  • Android使用辅助服务AccessibilityService实现自动化任务
  • 工业大数据分析算法实战-day15
  • C语言实现顺序表详解
  • 【ES6复习笔记】对象方法扩展(17)
  • 【视觉惯性SLAM:相机成像模型】
  • 学习笔记(C#基础书籍)-- C#基础篇
  • 操作系统(26)数据一致性控制
  • ubuntu24.04使用opencv4
  • 【项目构建】Gradle入门
  • Electron -- Electron应用主要核心(二)
  • 【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
  • git命令恢复/还原某个文件、删除远程仓库中的文件