register.json не входит в систему пользователя и не возвращает сеанс пользователя / токен / пароль


9

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

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

против

Когда я вызываю конечную точку Сервисов /services/user/register.json, Drupal создает учетную запись, но сеанс не сохраняется. Смотрите мои скриншоты ниже.

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

Как я могу либо A. заставить сеанс сохраниться для последующих вызовов ресурсов службы ИЛИ B. перехватить, чтобы добавить пользовательский или автоматически сгенерированный пароль обратно в ответ json, чтобы я мог программно повторно отправить форму /login.json на стороне клиента (которая сохраняется)?

Этот вопрос, как глобальный $ user может отличаться между интерфейсом 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, это против условий, чтобы попросить платную помощь здесь?
Ешьте

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

ты слишком много раз помогал мне жаловаться, но черт побери. я мог бы перевести этот разговор в автономный режим и не загромождать этот экран, если только мы не разрешим его. Также здесь у меня даже нет репутации, чтобы использовать функцию чата. Могу ли я обменять некоторые из StackOverflow? Даже не связать мою ссылку GitHub в репо?
Ешьте

1
Даже не :) Мы просто не форум поддержки, и все, что не является «вопросом» или «ответом», противоречит нашей миссии по созданию высококачественного хранилища знаний о Drupal. Все, что необходимо для ответа на вопрос, должно быть в самом вопросе, потому что, если это не так, вопрос становится бесполезным, как только пропадают внешние ссылки или проблема устранена. Правила могут показаться произвольными или даже суровыми, но они были доказаны необходимыми моделью Stack Exchange в целом на протяжении ряда лет. Если вы помните, что здесь просто Q + A, проблем не будет
Клайв

Что касается вашего представителя в чате - вы очень близки к этому сейчас, и я подозреваю, что этот вопрос привлечет несколько голосов, поскольку он хорошо написан. Они придут со временем. Это еще одна вещь, которую я должен упомянуть, у нас нет чувства времени здесь как таковой - мы бы предпочли, чтобы вопросы занимали больше времени, но более качественно, чем быстрые ответы. Не то чтобы мы поощряли людей быть медлительными или что-то в этом роде, но если вам нужно что-то совершенное с учетом времени, не стоит рисковать вашими ставками на то, что происходит здесь, поскольку мы не сосредоточены на этом
Клайв

Ответы:


1

Не уверены, что вам нужен ответ на данный момент (или если он хоть один), но похоже, что у вас включено «Требовать подтверждение по электронной почте, когда посетитель создает учетную запись»?

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

Чтобы отключить это, перейдите в / admin / config / people / accounts и снимите флажок Требовать подтверждение по электронной почте, когда посетитель создает учетную запись.

Если вы посмотрите на таблицу пользователей в базе данных, в столбце состояния должно отображаться 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);

передать идентификатор электронной почты пользователя и пароль, после чего он вернет все необходимые значения, такие как идентификатор сеанса, имя сеанса, токен, идентификатор пользователя


Он создает новые сеансы, но не вставляет записи в таблицу сеансов, поэтому все еще нет действительного сеанса
Мохаммед Гомма
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.