register.json не здійснює логін користувача та не повертає сеанс / маркер / пароль користувача


9

Я намагався тут перерахувати занадто багато варіантів, але основний момент полягає в тому, що я не можу ввійти до користувача після реєстрації через Сервіси. Я спробував свіжу інсталяцію Drupal 7.33 з увімкненими лише службами 7.x.3.11 та налаштуваннями ресурсів за замовчуванням, передбаченими drupalgap 7.x.1.9

Коли я реєструюсь за допомогою інтерфейсу Drupal, користувач створюється, сеанс відкривається, і я приземляюсь на свою сторінку профілю, у яку ввійшов.

vs.

Коли я телефоную кінцевій точці Служб /services/user/register.json, Drupal створює обліковий запис, але сеанс не зберігається. Дивіться мої скріншоти нижче.

введіть тут опис зображення

Як я можу А. змусити сеанс зберігатись для наступних викликів сервісного ресурсу АБО гачок, щоб додати користувачеві або автоматично згенерований пароль назад у відповідь json, щоб я міг програмно повторно подати форму /login.json на стороні клієнта (який зберігається)?

Це питання, як міг глобальний користувач $ відрізнятись між інтерфейсом Drupal та модулем Services? описує мою ту саму проблему за допомогою LoginToboggan.

На моєму скріншоті ви побачите рядок налагодження під назвою "налагодження входу". Походить з рядка 333 "/sites/all/modules/logintoboggan/logintoboggan.module", де я все це намагався безрезультатно ...

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, чи проти термінів вимагати тут оплачуваної допомоги?
EAT

Це @EliATaylor, я просто залишав коментар. Нас цікавить лише питання і відповідь тут , що-небудь інше (вимагання оплачуваної роботи, прохання про посилання на підручники або, в основному, більшість інших речей, які трапляються поза межами сайту) - це відволікання від цього і чогось, що ми захищаємо. Все, що ми насправді хочемо, - це гарне запитання (яке у нас тут є, дивовижне) і хороша відповідь (яку, сподіваємось, ви отримаєте)
Клайв

ти мені надто багато разів допомагав скаржитися, але gosh @clive. я міг би взяти цю розмову в автономному режимі і не захаращувати цей екран, за винятком випадків, коли ми це вирішимо. Також тут я навіть не маю репутації використовувати функцію чату. Чи можу я торгувати частиною StackOverflow? Навіть не моє посилання github на репо?
Їжте

1
Навіть не просто :) Ми просто не підтримуємо форум, і все, що не є "питанням" чи "відповіддю", суперечить нашій місії створення високоякісного сховища знань про Drupal. Все, що потрібно для відповіді на питання, повинно бути в самому запитанні, тому що якщо цього не відбувається, питання стає марним, як тільки виїжджають міжміські посилання, або проблема вирішується. Правила можуть здатися довільними або навіть суворими, але вони були доведені необхідними моделлю Stack Exchange в цілому протягом ряду років. Якщо ви пам’ятаєте, що тут просто Q + A, ніколи не буде проблем
Клайв

Щодо вашого представника для спілкування в чаті - ви зараз дуже близький до цього, і я підозрюю, що це запитання приверне кілька результатів, оскільки це добре написано. Вони прийдуть з часом. Це інше, що я мушу зазначити, у нас немає відчуття часу як такого - ми, швидше, на запитання потребували більше часу, але якісніше, ніж швидкі та основні відповіді. Не те, щоб ми заохочували людей бути повільними чи подібними, але якщо вам потрібно щось зробити в залежності від часу, це не гарна ідея хеджувати свої ставки на те, що відбувається тут, оскільки ми не зосереджені на цьому
Клайв

Відповіді:


1

Не впевнені, чи потрібна відповідь у цей момент (чи це навіть одна), але схоже, у вас увімкнено "Потрібна перевірка електронної пошти, коли відвідувач створює обліковий запис"?

На вашому зображенні, у другому вікні (де ви бачите повідомлення від drupal_set_message ()), написано, що електронний лист було надіслано, і вам потрібно буде дотримуватися інструкцій, щоб отримати повне повідомлення.

Щоб вимкнути це, перейдіть до / admin / config / люди / акаунти та зніміть прапорець Потрібно підтвердити електронну пошту, коли відвідувач створює обліковий запис.

Якщо ви подивитеся на таблицю користувачів у базі даних, у стовпці стану має бути вказано 1 для включеного, 0 для відключеного (це означає, що він не натиснув на посилання в електронній пошті).

Сподіваюся, це допомагає!


Це не спрацювало, навіть якщо ти за замовчуванням активізував зареєстрованих користувачів
Мохаммед Гомма

0

Це добре для мене, ви можете використовувати наступний код

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);

передайте ідентифікатор і пароль електронної пошти користувача, тоді він поверне все необхідне значення, наприклад ідентифікатор сесії, ім'я сесії, маркер, uid користувача


Він створює нові сеанси, але в таблицю сеансів не вставлено записів, тому все ще немає дійсної сесії
Мохаммед Гомма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.