رفتن به مطلب

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


پست های پیشنهاد شده

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

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


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
لینک به ارسال
  • 5 هفته بعد...

شما اومدید به صورت 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 );
?>

لینک به ارسال

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

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...