register.json no inicia sesión en el usuario ni devuelve la sesión / token / contraseña del usuario


9

He intentado demasiadas variaciones para enumerarlas aquí, pero el punto básico es que no puedo iniciar sesión al usuario inmediatamente después del registro a través de los Servicios. He intentado una instalación nueva de Drupal 7.33 con solo los Servicios 7.x.3.11 habilitados y la configuración de recursos predeterminada proporcionada por drupalgap 7.x.1.9

Cuando me registro con la interfaz de Drupal, se crea el usuario, se abre la sesión y aterrizo en mi página de perfil iniciada sesión.

vs.

Cuando llamo al punto final de Servicios /services/user/register.json, Drupal crea la cuenta pero la sesión no persiste. Vea mis capturas de pantalla a continuación.

ingrese la descripción de la imagen aquí

¿Cómo puedo A. hacer que la sesión persista para las siguientes llamadas de recursos del Servicio O B. enganchar para agregar la contraseña del usuario o autogenerada nuevamente en la respuesta json para que pueda volver a enviar mediante programación el formulario /login.json del lado del cliente (que persiste)?

Esta pregunta, ¿cómo podría ser diferente el usuario global $ entre la interfaz de Drupal y el módulo de Servicios? describe mi mismo problema usando LoginToboggan.

En mi captura de pantalla, verá una línea de depuración llamada "depuración de inicio de sesión". Proviene de la línea 333 de "/sites/all/modules/logintoboggan/logintoboggan.module" donde probé todo esto en vano ...

function logintoboggan_process_login($account, &$edit, $redirect = array()){
  global $user;

  $user = user_load($account->uid);

//watchdog('login debug', json_encode($account)); 
watchdog('login debug', json_encode($edit));

  //user_login_submit(array(), array('uid' => $account->uid));
  user_login_finalize($edit);

//  $user = user_load($account->uid);
//  $user->token = drupal_get_token('services'); // WE HAVE A TOKEN ALTHOUGH I DOUBT THIS WOULD WORK IN TERMS OF SESSION PERSISTANCE
//  user_login_finalize($edit);
//  module_invoke_all('hook_user_login');
//  module_invoke_all('tripchi_user_login');
//  module_invoke_all('logintoboggan_user_login');

@Clive, ¿está en contra de los términos solicitar ayuda paga aquí?
COME el

Es @EliATaylor, solo estaba dejando un comentario. Sólo estamos interesados en la pregunta y la respuesta aquí , todo lo demás (solicitar un trabajo remunerado, pidiendo enlaces a tutoriales, o básicamente la mayoría de otras cosas que suceden fuera del sitio) es una distracción de eso y algo que protegemos contra. Todo lo que realmente queremos es una buena pregunta (que tenemos aquí, increíble) y una buena respuesta (que con suerte obtendrás)
Clive

Me has ayudado demasiadas veces para quejarme aquí, pero Dios mío @clive. Podría desconectar esa conversación y no saturar esta pantalla, excepto una vez que la resolvamos. También aquí, ni siquiera tengo la reputación de usar la función de chat. ¿Puedo cambiar algunos de StackOverflow? ¿Ni siquiera vinculo mi enlace github al repositorio?
COME

1
Ni siquiera :) Simplemente no somos un foro de soporte, y cualquier cosa que no sea "pregunta" o "respuesta" va en contra de nuestra misión de crear un depósito de conocimiento de alta calidad sobre Drupal. Todo lo que sea necesario para responder a la pregunta debe estar en la pregunta en sí, porque si no es así, la pregunta se vuelve inútil tan pronto como los enlaces fuera del sitio desaparezcan, o el problema se solucione. Las reglas pueden parecer arbitrarias, o incluso duras, pero han sido probadas necesarias por el modelo de Stack Exchange en su conjunto durante varios años. Si recuerda que aquí solo hay preguntas y respuestas, nunca habrá un problema
Clive

Con respecto a su representante para chatear, ahora está muy cerca de eso, y sospecho que esta pregunta atraerá algunos votos positivos, ya que está bien escrito. Vendrán con el tiempo. Esa es la otra cosa que debo mencionar, no tenemos sentido del tiempo aquí como tal: preferimos que las preguntas tarden más en responder, pero de una manera de mayor calidad que las respuestas rápidas y básicas. No es que alentemos a las personas a ser lentas ni nada de eso, pero si necesita algo logrado de una manera sensible al tiempo, no es una buena idea cubrir sus apuestas sobre lo que sucede aquí, ya que no estamos enfocados en eso
Clive

Respuestas:


1

¿No está seguro si necesita una respuesta en este momento (o si esta es una), pero parece que tiene activada la opción "Requerir verificación por correo electrónico cuando un visitante crea una cuenta"?

En su imagen, en la segunda ventana (donde ve el mensaje de drupal_set_message ()), dice que se envió un correo electrónico y deberá seguir las instrucciones para obtener el mensaje completo.

Para desactivar esto, navegue a / admin / config / people / accounts y desmarque Requerir verificación por correo electrónico cuando un visitante cree una cuenta.

Si observa la tabla de usuarios en la base de datos, la columna de estado debe mostrar un 1 para habilitado, 0 para deshabilitado (lo que significa que no ha hecho clic en el enlace del correo electrónico).

¡Espero eso ayude!


No funcionó incluso si activa a los usuarios registrados de forma predeterminada
Mohammed Gomma

0

Funciona bien para mí, puedes usar el siguiente código

global $user;
$username=$data['email'];
$password=$data['pass'];
if ($user->uid) {
    // user is already logged in
    return services_error(t('Already logged in as @user.', array('@user' => $user->name)), 406);
}

// Check if account is active.
if (user_is_blocked($username)) {
    return services_error(t('The username %name has not been activated or is blocked.', array('%name' => $username)), 403);
}

// Emulate drupal native flood control: check for flood condition.
$flood_state = array();
if (variable_get('services_flood_control_enabled', TRUE)) {
    $flood_state = _user_resource_flood_control_precheck($username);
}

// Only authenticate if a flood condition was not detected.
if (empty($flood_state['flood_control_triggered'])) {
    $uid = user_authenticate($username, $password);
}
else {
    $uid = FALSE;
}

// Emulate drupal native flood control: register flood event, and throw error
// if a flood condition was previously detected
if (variable_get('services_flood_control_enabled', TRUE)) {
    $flood_state['uid'] = $uid;
    _user_resource_flood_control_postcheck($flood_state);
}

if ($uid) {
    $user = user_load($uid);
    if ($user->uid) {
        user_login_finalize();

        $return = new stdClass();
        $return->sessid = session_id();
        $return->session_name = session_name();
        $return->token = drupal_get_token('services');
        $account = clone $user;
        services_remove_user_data($account);
        $return->user = $account;

        return $return;
    }
}
watchdog('user', 'Invalid login attempt for %username.', array('%username' => $username));
return services_error(t('Wrong username or password.'), 401);

pasar la identificación y contraseña del correo electrónico del usuario, luego devolverá todo el valor requerido, como la identificación de la sesión, el nombre de la sesión, el token, el uid del usuario


Crea nuevas sesiones pero no se inserta ningún registro en la tabla de sesiones, por lo que aún no hay una sesión válida
Mohammed Gomma
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.