اگر بخواهیم کد استاد را در قسمت Ajax کمی بهینهتر کنیم میتوانیم از دستورات زیر استفاده کنیم.
<?php
add_action('wp_ajax_nopriv_wp_lr_auth_login','wp_lr_auth_login');
function wp_lr_auth_login(){
if (!isset($_POST['_nonce']) || !wp_verify_nonce($_POST['_nonce'], 'your_action')) {
wp_die(
'متاسفانه، شما اجازه انجام این کار را ندارید.',
'دسترسی غیرمجاز',
array('response' => 403, 'back_link' => true) // کد وضعیت HTTP و لینک بازگشت
);
}
$email = sanitize_text_field($_POST['email']);
$password = sanitize_text_field($_POST['password']);
$remember_me = rest_sanitize_boolean($_POST['remember_me']);
wp_lr_validate_input($email,$password);
$user_login = get_user_by_email($email);
$user_login = $user_login->user_login;
$creds = [
/*'user_login'=>sanitize_user($_POST['user_name']),*/
'user_login'=>sanitize_user($user_login),
'user_password'=>$password,
'remember'=>$remember_me
];
$user = wp_signon($creds,false);
if(!is_wp_error($user)){
// wp_clear_auth_cookie();
wp_set_current_user($user-ID,$user->user_login);
/*wp_set_auth_cookie($user-ID);*/
wp_send_json([
'success'=>true,
'message'=>'ورود شما موفقیت آمیز بود در حال انتقال ...'
],200);
/* wp_redirect(site_url());*/
}else{
wp_send_json([
'error'=>true,
'message'=>'نام کاربری یا کلمه عبور اشتباه است!'
],403);
}
}
function wp_lr_validate_input($email, $password) {
// تابع برای ارسال پاسخ خطا
function send_error_response($message) {
wp_send_json([
'error' => true,
'message' => $message
], 403);
}
// تابع بررسی دامنه ایمیل (رکورد MX)
function is_valid_email_domain($email) {
$domain = substr(strrchr($email, "@"), 1); // استخراج دامنه از ایمیل
return checkdnsrr($domain, "MX");
}
// بررسی خالی بودن هر دو فیلد
if (empty($email) && empty($password)) {
send_error_response('لطفا ایمیل و کلمه عبور خود را وارد نمایید.');
}
// بررسی خالی بودن ایمیل
if (empty($email)) {
send_error_response('لطفا ایمیل خود را وارد نمایید.');
}
// بررسی خالی بودن کلمه عبور
if (empty($password)) {
send_error_response('لطفا کلمه عبور خود را وارد نمایید.');
}
// بررسی معتبر بودن ایمیل (فرمت ایمیل)
if (!is_email($email)) {
send_error_response('لطفا ایمیل معتبر وارد نمایید.');
}
// بررسی معتبر بودن دامنه ایمیل (رکورد MX)
if (!is_valid_email_domain($email)) {
send_error_response('دامنه ایمیل معتبر نیست.');
}
// کد ادامه فرآیند شما اینجا قرار میگیرد
}
//Set expired Auth Cookie
add_filter('auth_cookie_expiration','wp_lr_set_cookie',1);
function wp_lr_set_cookie($expiration){
return $expiration = 60*60*48;
}
در کد بالا تغییرات زیر صورت گرفته است.
استفاده از wp_die: به جای die از wp_die استفاده میکنیم. این تابع قابلیتهای بیشتری برای مدیریت خطاها دارد و میتواند پیامهای مناسبتری به کاربر نمایش دهد.
ضمنا به جای شرط منطقی && از شرط || استفاده شده است که کمی بهتر و بهینهتر است زیرا زمانی که بخش !isset($_POST['_nonce'])
معتبر نباشد نیازی به بررسی بخش دوم نیست
- اضافه کردن تابع is_valid_email_domain(): این تابع بعد از بررسی صحت فرمت ایمیل توسط is_email() فراخوانی میشود. این تابع بررسی میکند که آیا دامنه ایمیل دارای رکورد MX معتبر است یا خیر.
- استفاده از send_error_response() برای ارسال پیامهای خطا: هر زمان که خطایی رخ میدهد، به جای تکرار کد، از تابع send_error_response() استفاده شده است که خطا را به کاربر ارسال میکند.
البته با تشکر از استاد به خاطر دوره عالی و حرفه ای و صد البته که قصد من فقط تمرین و تکرار بیشتر دوستان است وگرنه کدهای استاد صالحی عزیز به مراتب عالی و صرفا در جهت آموزش هستند.....