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