درود خدمت شما
ما پلاگینی که در این دوره نوشته شده رو کمی توسعه دادیم و ورود با موبایل (فقط موبایل، بدون پسوود و تنها توسط کد موقتی که پیامک میشه) رو مشابه با ساختار همین پلاگین ایجاد کردیم.
روال کار به این صورت هست که کاربر موبایل رو وارد میکنه و موبایل اعتبار سنجی میشه و اگر این موبایل برای کاربری ثبت نشده باشه اخطار عدم وجود کاربر میده، اگر ثبت شده باشه یک کد رندوم 6 رقمی ایجاد میکنه و برای کاربر پیامک میکنه. پیش از اینکه پیامک کنه در یوزرمتا با یک key به صورت last_user_login_code ذخیره میشه (البته برای امنیت بیشتر، value بعد از انجام شدن لاگین کاربر با یک استرینگ بلند و رندوم جایگزین میشه که امکان نفوذ رو تقریبا به صفر میرسونه).
مشکل اینجاست که ما با استفاده از قطعه کد زیر در فایل ajax.php میخوایم اطلاعات ایجکس رو بگیریم و یک اعتبارسنجی باهاش انجام بدیم و آیدی کاربر رو باهاش بدست بیاریم و مشخصاتی مثل user_login و user_password رو بدست بیاریم و تهش عملیات لاگین رو انجام بدیم. با اینکه این مقادیر درست گرفته میشن اما عملیات لاگین انجام نمیشه.
در کل مسیر درست پیش رفته یا کلا ساختار اشتباهه؟
کد زیر برای زمانی هست که کاربر موبایل رو وارد کرده و موبایل اعتبار سنجی شده و فرم کد موقت براش ظاهر شده و حالا کاربر کد رو وارد کرده و دکمه سابمیت رو زده که کد زیر پردازش بشه. مقدار $user_login_code کدی هست که کاربر وارد کرده و مقدار last_user_login_code کلیدی هست که کد موقتی که پیامک شده داخل یوزرمتا با این کلید ذخیره شده.
function wp_auth_do_mobile_login_code()
{
$user_login_code = sanitize_text_field($_POST['user_login_code']);
$args = [
'meta_key' => 'last_user_login_code',
'meta_value' => $user_login_code,
];
$user_query = new WP_User_Query($args);
$authors = $user_query->get_results();
$user_id = $authors[0] -> ID;
$userData = get_userdata($user_id);
$userLogin = $userData -> user_login;
$userPassword = $userData -> user_pass;
if (empty($authors)) {
wp_send_json([
'success' => false,
'message' => 'کد وارد شده صحیح نیست !!!'
], 403);
} else {
$mobileLoginResult = wp_signon([
'user_login' => $userLogin,
'user_password' => $userPassword,
'remember' => false
]);
}
if (is_wp_error($mobileLoginResult)) {
wp_send_json([
'success' => false,
'message' => $userPassword
], 403);
}
wp_send_json([
'success' => true,
'message' => 'شما وارد شدید / در حال انتقال به پنل کاربری...'
], 200);
}
add_action('wp_ajax_nopriv_wp_auth_mobile_login_code', 'wp_auth_do_mobile_login_code');