Front-End Login Enter
Добрый день.
Был код
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' ); $log = isset($_POST['log']) ? $_POST['log'] : ''; $pwd = isset($_POST['pwd']) ? $_POST['pwd'] : ''; $rememberme = isset($_POST['rememberme']) ? $_POST['rememberme'] : ''; if($rememberme) { $rbme = true; } else { $rbme = false; } $creds = array(); $creds['user_login'] = $log; $creds['user_password'] = $pwd; $creds['remember'] = $rbme; $user = wp_signon( $creds, false ); if ( !is_wp_error($user) ) { header('location:' . home_url('/')); exit; } else { header('location:' . home_url('/recovery/?auth=bad')); exit; }
И код в function
if (!current_user_can('administrator')): show_admin_bar(false); endif; function true_wp_admin_block() { if (!current_user_can('administrator')) { header('location:' . get_home_url() ); exit(); } add_action('admin_menu', 'true_wp_admin_block'); function wph_noadmin() { if (is_admin() && !current_user_can('administrator')) { wp_redirect(home_url()); exit; } } add_action('init', 'wph_noadmin');
Данный код не авторизовывал Администратора так как надо..
На фронте панель админа была, но в админку не пускала (перенаправляла на главную)
Причина была в том что функция wp_set_auth_cookie( $user_id ) не была присвоена при входе, соответственно вход в админ часть был не доступен или с неполными правами
Код я дополнил
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' ); $log = isset($_POST['log']) ? $_POST['log'] : ''; $pwd = isset($_POST['pwd']) ? $_POST['pwd'] : ''; $rememberme = isset($_POST['rememberme']) ? $_POST['rememberme'] : ''; if($rememberme) { $rbme = true; } else { $rbme = false; } $creds = array(); $creds['user_login'] = $log; $creds['user_password'] = $pwd; $creds['remember'] = $rbme; $user = wp_signon( $creds, false ); if ( !is_wp_error($user) ) { if( strpos($log,'@') !== false ) { $user_by = get_user_by( 'email', $log ); } else { $user_by = get_user_by( 'login', $log ); } $user_id = $user_by->ID; wp_set_auth_cookie( $user_id ); header('location:' . home_url('/')); exit; } else { header('location:' . home_url('/recovery/?auth=bad')); exit; }
Код работает. Версия WP 4.9.13.
Подскажите пожалуйста безопасность такого кода при входе
Или лучше ограничить только первым $user_id ?
То есть дополнить
if($user_id === 1) { wp_set_auth_cookie( $user_id ); }