register.json nie loguje użytkownika ani nie zwraca sesji użytkownika / tokena / hasła


9

Próbowałem o wiele za dużo odmian, aby wymienić tutaj, ale podstawową kwestią jest to, że nie mogę się zalogować do użytkownika natychmiast po rejestracji za pośrednictwem usług. Próbowałem świeżej instalacji Drupal 7.33 z włączonymi tylko usługami 7.x.3.11 i domyślnymi ustawieniami zasobów dostarczonymi przez drupalgap 7.x.1.9

Kiedy rejestruję się za pomocą interfejsu Drupal, użytkownik zostaje utworzony, sesja otwarta, i ląduję na mojej stronie profilu zalogowanej.

vs.

Kiedy nazywam punkt końcowy usług /services/user/register.json, Drupal tworzy konto, ale sesja nie trwa. Zobacz moje zrzuty ekranu poniżej.

wprowadź opis zdjęcia tutaj

Jak mogę A. doprowadzić do utrwalenia sesji dla kolejnych wywołań zasobów usługi LUB B. przechwycić, aby dodać hasło użytkownika lub automatycznie wygenerowane hasło z powrotem do odpowiedzi json, aby móc programowo ponownie przesłać plik /login.json po stronie klienta (który trwa)?

To pytanie, w jaki sposób globalny użytkownik $ może się różnić między interfejsem Drupal a modułem usług? opisuje mój ten sam problem za pomocą LoginToboggan.

Na moim zrzucie ekranu zobaczysz linię debugowania o nazwie „debugowanie logowania”. Pochodzi z wiersza 333 „/sites/all/modules/logintoboggan/logintoboggan.module”, gdzie próbowałem tego wszystkiego bezskutecznie ...

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, czy wbrew warunkom jest proszenie o płatną pomoc tutaj?
Zjedz

To jest @EliATaylor, właśnie zostawiłem komentarz. Interesuje nas tylko pytanie, a odpowiedź tutaj , cokolwiek innego (nagabywanie zarobkowej pracy, proszenie o linki do samouczków lub w zasadzie większość innych rzeczy, które zdarzają się poza witryną) jest rozproszeniem od tego i czymś, przed czym się chronimy. Wszystko, czego naprawdę chcemy, to dobre pytanie (które mamy tutaj, niesamowite) i dobra odpowiedź (która, mam nadzieję, dostaniesz)
Clive

zbyt wiele razy pomogłeś mi narzekać, ale gosh @clive. mogłem przenieść tę rozmowę w tryb offline i nie zaśmiecać tego ekranu, chyba że raz go rozwiążemy. Również tutaj nie mam reputacji do korzystania z funkcji czatu. Czy mogę wymienić niektóre z StackOverflow? Nawet nie łączysz mojego łącza github z repozytorium?
Zjedz

1
Nawet :) Po prostu nie jesteśmy forum wsparcia, a wszystko, co nie jest „pytaniem” ani „odpowiedzią”, jest sprzeczne z naszą misją tworzenia wysokiej jakości repozytorium wiedzy o Drupal. Wszystko, co jest konieczne, aby odpowiedzieć na pytanie, musi znajdować się w samym pytaniu, ponieważ jeśli nie, pytanie staje się bezużyteczne, gdy tylko linki zewnętrzne znikną lub problem zostanie rozwiązany. Reguły mogą wydawać się arbitralne, a nawet surowe, ale od wielu lat okazały się konieczne w modelu Stack Exchange jako całości. Jeśli pamiętasz, że to tylko Q + A, nigdy nie będzie problemu
Clive

Jeśli chodzi o twojego przedstawiciela do czatowania - jesteś teraz bardzo blisko tego i podejrzewam, że to pytanie przyciągnie kilka pozytywnych opinii, ponieważ jest dobrze napisane. Przybędą z czasem. To kolejna rzecz, o której powinienem wspomnieć, że nie mamy tutaj poczucia czasu - wolelibyśmy, aby odpowiedzi trwały dłużej, ale w wyższej jakości niż w przypadku szybkich i podstawowych odpowiedzi. Nie dlatego, że zachęcamy ludzi do powolności lub czegoś podobnego, ale jeśli potrzebujesz czegoś osiągniętego w sposób wrażliwy na czas, nie jest dobrym pomysłem zabezpieczyć swoje zakłady na tym, co się tutaj dzieje, ponieważ nie koncentrujemy się na tym
Clive

Odpowiedzi:


1

Nie jesteś pewien, czy potrzebujesz odpowiedzi w tym momencie (lub jeśli jest to nawet jedna), ale wygląda na to, że masz włączoną opcję „Wymagaj weryfikacji przez e-mail, gdy użytkownik tworzy konto”?

Na twoim obrazie, w drugim oknie (gdzie widzisz wiadomość z drupal_set_message ()), mówi, że wysłano e-maila i będziesz musiał postępować zgodnie z instrukcjami, aby uzyskać pełną wiadomość.

Aby to wyłączyć, przejdź do / admin / config / people / account i usuń zaznaczenie opcji Wymagaj weryfikacji e-mail, gdy użytkownik utworzy konto.

Jeśli spojrzysz na tabelę użytkowników w bazie danych, kolumna stanu powinna pokazywać 1 dla włączonego, 0 dla wyłączonego (co oznacza, że ​​nie kliknął łącza w wiadomości e-mail).

Mam nadzieję, że to pomoże!


Nie działało, nawet jeśli domyślnie
włączasz

0

Dla mnie działa dobrze, możesz użyć następującego kodu

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

przekaż identyfikator e-mail użytkownika i hasło, a następnie zwróci wszystkie wymagane wartości, takie jak identyfikator sesji, nazwa sesji, token, identyfikator użytkownika


Tworzy nowe sesje, ale nie wstawiono żadnego rekordu w tabeli sesji, więc nadal nie ma ważnej sesji
Mohammed Gomma
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.