chico ninja
Quiero iniciar sesión en usuarios de wordpress sin contraseña. Esto es lo que quiero. Decir visitas de usuarios http://example-site.com/6789098765678.php
y en la página ingresará su nombre de usuario, automáticamente iniciará sesión sin contraseña.
He intentado algunas cosas como wp_set_auth_cookie
y todo pero no se donde poner. Vengo de un entorno de Ruby on Rails y tengo un conocimiento mínimo sobre PHP.
Sé que este comportamiento no es seguro. Es un caso de uso específico.
La respuesta que publiqué dentro de los comentarios, puede usarla de la siguiente manera.
Lo que necesitas para que esto sea posible es. Crear ajax hooks
para la función de wordpress que vamos a usar para el inicio de sesión del usuario solo con el nombre de usuario, y jQuery ajax llama a esa función.
El primer paso para hacer aquí es ir a: wp-content/themes/your_theme_name/
Y abre el archivo llamado functions.php
luego, al final del archivo, agregue el siguiente código.
function username_login(){
// Automatic login //
$username = $_POST['username'];
$user = get_user_by('login', $username );
// Redirect URL //
if ( !is_wp_error( $user ) )
{
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID );
wp_set_auth_cookie ( $user->ID );
$redirect_to = user_admin_url();
echo json_encode(array('error_code'=>0));
exit();
} else {
echo json_encode(array('error_code'=>1));
exit();
}
exit();
}
add_action('wp_ajax_username_login','username_login');
add_action('wp_ajax_nopriv_username_login','username_login');
Como puede ver, hemos utilizado un add_action
función para enganchar a nuestro username_login
función desde el controlador ajax, lea más sobre ganchos de wordpress aquí
El siguiente paso que necesitamos aquí es hacer una llamada ajax a la función que hemos creado y hacer que el usuario inicie sesión y luego actualizar el sitio cuando el usuario haya iniciado sesión. Lo que necesita es usar el siguiente código para enviar la solicitud a WordPress para iniciar sesión el usuario. Agregue el siguiente código a su archivo footer.php, que se encuentra dentro wp-content/themes/your_theme_name/
y abierto footer.php
:
jQuery('#username_login').on('submit',function(e){
e.preventDefault();
var data = $(this).serializeArray();
data.push({ name:'action',value:'username_login' });
$.ajax({
url:"<?php echo admin_url('admin-ajax.php'); ?>";,
type: 'POST',
dataType: 'json',
data:data,
success:function(response){
if(response.error_code == 1){
alert('user cannot login')
} else {
alert('user logged in');
location.reload();
}
}
});
});
Como puede ver en el código JavaScript anterior, tenemos un selector de formulario llamado username_login
lo que debemos hacer ahora es crear un elemento de formulario con la identificación username_login
y dentro de él necesitamos crear una entrada llamada username
con tipo de botón submit
:
<form id="username_login">
<input type="text" name="username" placeholder="Your username..." required/>
<button type="submit" name="submit">Login</button>
</form>
Ahora que tiene todo, ¿cómo va a funcionar esto con este flujo? . Bueno, cuando el usuario ingresa el nombre de usuario y presiona Iniciar sesión, se enviará una solicitud ajax a la url: yoursite.com/wp-admin/admin-ajax.php?action=username_login
con el parámetro llamado action
y cuando el usuario inicie sesión, el sitio se actualizará a medida que el usuario inicie sesión y luego el usuario tendrá acceso a las funciones normales del usuario sin ningún problema.
-
Gracias por el tiempo que te has tomado en responder a mi pregunta. Si bien este es un enfoque, un enfoque fácil es simplemente pegar el código aquí: wordpress.stackexchange.com/questions/53503/… en algún archivo PHP y agregando la línea
require( dirname(__FILE__) . '/wp-load.php' );
al archivo en el inicio. es una solución simple 😀-Ninja chico
7 julio 2016 a las 9:40
-
Votar y aceptar como esta es una forma de hacer el trabajo. Pero he usado la solución alternativa que especifiqué anteriormente.
-Ninja chico
7 de julio de 2016 a las 9:42
-
Su solución también es buena, la que he publicado, es por si necesita crear algo más dinámico y basado en javascript. Puedes hacer de esa manera.
–Arsh Singh
7 de julio de 2016 a las 9:43
Por defecto, wordpress no proporciona ningún tipo de funcionalidad que esté buscando. La mejor manera de hacer esto posible es crear su propio complemento y conectarlo a la tabla de usuarios y luego crear sus formularios de inicio de sesión personalizados solo con el nombre de usuario. guarde la contraseña original de los usuarios en usermeta (no la salada y con hash), y luego, cuando el usuario ingrese su nombre de usuario para iniciar sesión. obtenga la contraseña de usermeta en función del nombre de usuario y luego envíe esa contraseña y nombre de usuario a la función de inicio de sesión de wordpress, que iniciará la sesión del usuario y establecerá la sesión.
–Arsh Singh
06/07/2016 a las 14:30
@ArshSingh Entonces, ¿cómo es esto posible? wordpress.stackexchange.com/questions/53503/…
-Ninja chico
6 de julio de 2016 a las 14:39
si quieres usar eso, ¿has marcado esto? wordpress.stackexchange.com/a/128445/66430
–Arsh Singh
6 de julio de 2016 a las 14:43
Solo por curiosidad, dado que cualquiera puede iniciar sesión como cualquiera, ¿cuál es el valor de un nombre de usuario?
– Damián
06/07/2016 a las 15:35
@DamienSugden Tengo una solución de back-end para autenticar a los usuarios. En lugar de contraseña, quiero usarla.
-Ninja chico
7 de julio de 2016 a las 2:28