implement find_or_create_user

This commit is contained in:
2025-07-16 14:17:06 +03:30
parent ce1ee62d66
commit f21aca5c1b
8 changed files with 105 additions and 26 deletions
+45 -23
View File
@@ -1,14 +1,16 @@
<?php
/**
* Plugin Name: Dabestaniha Authenticate Bridge
* Description: Authenticate WordPress user via json web token from Laravel Application.
* Description: Authenticate WordPress user via json web token from Mahakiha Application.
* Version: 1.0
* Author: Dabestaniha
*
* Example: https://wordpress.test/dabestaniha/login/?token=123&name=asd&email=test@wordpress.test
*/
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__.'/vendor/autoload.php';
use Dabestaniha\AuthenticateBridge\Requests\DabestanihaAuthenticateRequest;
use Dabestaniha\AuthenticateBridge\App\Http\Requests\DabestanihaAuthenticateRequest;
add_action('init', function () {
$request = DabestanihaAuthenticateRequest::make();
@@ -19,34 +21,54 @@ add_action('init', function () {
$request->validate();
$token = $request->string('token');
var_dump($token);
die();
$name = $request->string('name');
$email = $request->string('email');
// اینجا توکن رو اعتبارسنجی می‌کنیم
$user_id = verify_laravel_token_and_get_user_id($token); // این تابع رو بعداً می‌نویسیم
$user_id = find_or_create_user($email, $name);
if ($user_id) {
wp_set_auth_cookie($user_id);
wp_set_current_user($user_id);
do_action('wp_login', get_userdata($user_id)->user_login, get_userdata($user_id));
// انتقال به پنل
wp_redirect(home_url('/dashboard'));
exit;
} else {
wp_die('توکن نامعتبر است.');
}
login_user($user_id);
wp_redirect(home_url('/dashboard'));
exit();
});
function verify_laravel_token_and_get_user_id($token): bool|int
{
// مثلا: رمزگشایی JWT، یا بررسی دیتابیس توکن‌ها
// برای تست می‌تونیم یک توکن ثابت بذاریم
return 0;
}
if ($token === 'sample_token_123') {
return 2; // ID یک کاربر موجود
function find_or_create_user(string $email, string $name): int
{
$user = get_user_by('email', $email);
if ($user) {
return $user->ID;
}
$random_password = wp_generate_password(12, true);
$username = sanitize_user(strstr($email, '@', true));
if (username_exists($username)) {
$username .= '_'.wp_generate_password(4, false);
}
return false;
$user_id = wp_create_user($username, $random_password, $email);
if (is_wp_error($user_id)) {
wp_die(view('invalid-token'), 'Invalid Token', ['response' => 500]);
}
wp_update_user([
'ID' => $user_id,
'display_name' => $name,
]);
return $user_id;
}
function login_user(int $user_id): bool
{
wp_set_auth_cookie($user_id);
wp_set_current_user($user_id);
do_action('wp_login', get_userdata($user_id)->user_login, get_userdata($user_id));
return true;
}