Fenix

بازیابی فراموشی رمز عبور در قالب Ajax

3 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

سلام دوستان من از کدی جهت بازیابی پسورد فراموش شده در قالب استفاده میکنم که یک مشکل داره اونم این که وقتی نام کاربری را جهت باز یابی وارد میکنه و ارسال میزنه اگه وجود داشته باشه پسورد رو رندوم عوض میکنه و برای ایمیل طرف ارسال میکنه خوب این کارش بده چون شاید اون طرف اصلا خودش نباشه و یکی بخواد اذیت کنه

من کد رو میزارم ایا بهتره همینو رو ویرایش کنم یا برای از نو بنویسم خودم


function ajax_forgotPassword()
{
// First check the nonce, if it fails the function will break
check_ajax_referer('ajax-forgot-nonce', 'security');
global $wpdb;
$account = $_POST['user_login'];
if (empty($account)) {
$error = 'کاربر با این نام کاربر در سیستم وجود ندارد';
} else {
if (is_email($account)) {
if (email_exists($account))
$get_by = 'email';
else
$error = 'کاربر با این نام کاربر در سیستم وجود ندارد';
} else if (validate_username($account)) {
if (username_exists($account))
$get_by = 'login';
else
$error = 'کاربر با این نام کاربر در سیستم وجود ندارد';
} else
$error = 'کاربر با این نام کاربر در سیستم وجود ندارد';
}
if (empty ($error)) {
// lets generate our new password
//$random_password = wp_generate_password( 12, false );
$random_password = wp_generate_password();

// Get user data by field and data, fields are id, slug, email and login
$user = get_user_by($get_by, $account);
$update_user = wp_update_user(array('ID' => $user->ID, 'user_pass' => $random_password));
// if update user return true then lets send user an email containing the new password
if ($update_user) {
$from = 'WRITE SENDER EMAIL ADDRESS HERE'; // Set whatever you want like mail@yourdomain.com
if (!(isset($from) && is_email($from))) {
$sitename = strtolower($_SERVER['SERVER_NAME']);
if (substr($sitename, 0, 4) == 'www.') {
$sitename = substr($sitename, 4);
}
$from = 'No_Replay@' . $sitename;
}
$to = $user->user_email;
$subject = 'Your new password';
$sender = 'From: ' . get_option('name') . ' <' . $from . '>' . "\r\n";
$message = 'Your new password is: ' . $random_password . " ";
$headers[] = 'MIME-Version: 1.0' . "\r\n";
$headers[] = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers[] = "X-Mailer: PHP \r\n";
$headers[] = $sender;
$mail = wp_mail($to, $subject, $message, $headers);
if ($mail)
$success = 'پسورد جدید برای شما ارسال شد';
else
$error = 'System is unable to send you mail containg your new password.';
} else {
$error = 'Oops! Something went wrong while updaing your account.';
}
}
if (!empty($error))
echo json_encode(array('loggedin' => false, 'message' => __($error)));
if (!empty($success))
echo json_encode(array('loggedin' => false, 'message' => __($success)));
die();
}

آیا چیزی جایگزین هست که لینک فعال سازی ارسال کنه نه این که سرخود پسورد عوض کنه

ویرایش شده در توسط a2h
0

به اشتراک گذاری این پست


لینک به پست

شما اومدید به صورت Rand دارید تولید میکنید


$random_password = wp_generate_password();

و در اینجا برابر قرار دادید :


'user_pass' => $random_password));

میتونید یک تابع تعریف کنید که فقط یک هشدار بفرستد و جایگزین کنید

جای ریست کردن

خب چرا از reset pass کمک نمیگیرید (wp-login.php)

البته اگر کار خاصی مد نظر دارید بگید بهتره


<?php
login_footer('user_login');
break;
case 'resetpass' :
case 'rp' :
list( $rp_path ) = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) );
$rp_cookie = 'wp-resetpass-' . COOKIEHASH;
if ( isset( $_GET['key'] ) ) {
$value = sprintf( '%s:%s', wp_unslash( $_GET['login'] ), wp_unslash( $_GET['key'] ) );
setcookie( $rp_cookie, $value, 0, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
wp_safe_redirect( remove_query_arg( array( 'key', 'login' ) ) );
exit;
}
if ( isset( $_COOKIE[ $rp_cookie ] ) && 0 < strpos( $_COOKIE[ $rp_cookie ], ':' ) ) {
list( $rp_login, $rp_key ) = explode( ':', wp_unslash( $_COOKIE[ $rp_cookie ] ), 2 );
$user = check_password_reset_key( $rp_key, $rp_login );
if ( isset( $_POST['pass1'] ) && ! hash_equals( $rp_key, $_POST['rp_key'] ) ) {
$user = false;
}
} else {
$user = false;
}
if ( ! $user || is_wp_error( $user ) ) {
setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
if ( $user && $user->get_error_code() === 'expired_key' )
wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=expiredkey' ) );
else
wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=invalidkey' ) );
exit;
}
$errors = new WP_Error();
if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] )
$errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );
/**
* Fires before the password reset procedure is validated.
*
* @since 3.5.0
*
* @param object $errors WP Error object.
* @param WP_User|WP_Error $user WP_User object if the login and reset key match. WP_Error object otherwise.
*/
do_action( 'validate_password_reset', $errors, $user );
if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
reset_password($user, $_POST['pass1']);
setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a></p>' );
login_footer();
exit;
}
wp_enqueue_script('utils');
wp_enqueue_script('user-profile');
login_header(__('Reset Password'), '<p class="message reset-pass">' . __('Enter your new password below.') . '</p>', $errors );
?>

0

به اشتراک گذاری این پست


لینک به پست

کلاسی یا تابعی در وردپرس وجود نداره که لینک ریست پسورد ایجاد کنه برای کاربر

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری