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

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]);
    }

    // 解析 Token
    list($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.kler.cn/a/452693.html

相关文章:

  • CSS(四)display和float
  • VSCode 插件开发实战(七):插件支持了哪些事件,以及如何利用和监听这些事件
  • 查询 MySQL 默认的存储引擎(SELECT @@default_storage_engine;)
  • 【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等
  • 鸿蒙开发:了解帧动画
  • 预览和下载 (pc和微信小程序)
  • Idean 处理一个项目引用另外一个项目jar 但jar版本低的问题
  • 3D几何建模引擎Parasolid功能解析
  • dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端
  • STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE开发环境(支持JLINK、STLINK、DAPLINK)
  • DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)
  • Golang框架实战-KisFlow流式计算框架(9)-Cache/Params 数据缓存与数据参数
  • opencv中的色彩空间
  • 4.2 数据库分组查询
  • 机器学习(二)-简单线性回归
  • DVWA第二关 之命令注入
  • 怎么将PDF压缩大小?PDF文件进行压缩的几个方法推荐
  • css文字折行以及双端对齐实现方式
  • 面试题整理17----K8s中request和limit资源限制是如何实现的
  • 机器学习基础 衡量模型性能指标
  • 如何用PhpStudy搭建网络安全靶场
  • 数据结构-树(二叉树)
  • 不用电脑也不用编程,实现PLC、智能仪表对接SQL数据库的方案
  • Dataset Distillation with Attention Labels for Fine-tuning BERT
  • SpringAI人工智能开发框架005---SpringAI文本转语音_语音转文本_音频翻译程序接口编写_英文音频翻译_中文音频翻译_指定模型
  • Linux如何设置redis可以外网访问—执行使用指定配置文件启动redis