register.json kullanıcıya giriş yapmaz veya kullanıcının oturumu / belirteci / şifresini döndürmez


9

Burada listelemek için çok fazla varyasyon denedim, ancak temel nokta, Hizmetler aracılığıyla kayıttan hemen sonra kullanıcının oturum açamam. Sadece Services 7.x.3.11 etkin ve drupalgap 7.x.1.9 tarafından sağlanan varsayılan kaynak ayarları ile yeni bir Drupal 7.33 yüklemesini denedim

Drupal arayüzünü kullanarak kaydolduğumda kullanıcı oluşturulur, oturum açılır ve oturum açtığım profil sayfama iniyorum.

vs.

Hizmetler uç noktasını çağırdığımda /services/user/register.json, Drupal hesabı oluşturur, ancak oturum devam etmez. Aşağıdaki ekran görüntülerime bakın.

resim açıklamasını buraya girin

Bir sonraki hizmet kaynak çağrıları için devam etmek için nasıl oturum alabilirim VEYA B. /login.json form istemci tarafı programlı olarak yeniden gönderebilirsiniz böylece kullanıcı veya otomatik oluşturulan parola tekrar json yanıt eklemek için kanca devam eder)?

Bu soru , küresel $ kullanıcısı Drupal arayüzü ve Servisler modülü arasında nasıl farklı olabilir? LoginToboggan kullanarak aynı sorunumu anlatıyor.

Ekran görüntümde "login debug" adlı bir hata ayıklama satırı göreceksiniz. Tüm bunları boşuna denedim nerede "/sites/all/modules/logintoboggan/logintoboggan.module" 333 satır geliyor ...

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, burada ücretli yardım istemek şartlarına karşı mı?
EAT

@EliATaylor, sadece bir yorum bırakıyordum. Biz yalnızca söz konusu ilgilendiğiniz ve cevap burada , başka bir şey (temelde-site kapalı gerçekleşmesi birçok şey, ücretli iş talebinde öğreticiler bağlantılar için soran ya) biz karşı korumak bir olandan oyalama ve bir şeydir. Tek istediğimiz iyi bir soru (ki burada var, harika) ve iyi bir cevap (umarım elde edersiniz)
Clive

bana burada şikayet etmem için çok fazla yardım ettin ama gosh @clive. Bu konuşmayı çevrimdışına alabilir ve çözdükten sonra bu ekranı karıştırmayabilirim. Ayrıca burada, sohbet özelliğini kullanma şöhretim bile yok. StackOverflow'dan ticaret yapabilir miyim? Github bağlantımı repoya bile bağlamıyor musunuz?
EAT

1
Hatta değil :) Oldukça basit bir şekilde bir destek forumu değiliz ve "soru" veya "cevap" olmayan her şey Drupal hakkında yüksek kaliteli bir bilgi havuzu oluşturma misyonumuza aykırıdır. Soruyu cevaplamak için gerekli olan her şey sorunun kendisinde olmalıdır, çünkü eğer değilse, site dışı bağlantılar öldüğünde veya sorun çözüldüğünde soru işe yaramaz hale gelir. Kurallar keyfi veya sert görünebilir, ancak birkaç yıldır Stack Exchange modeli tarafından gerekli olduğu kanıtlanmıştır. Burada sadece Q + A olduğunu hatırlıyorsanız , asla bir sorun olmayacak
Clive

Sohbet için temsilcinizle ilgili olarak - şimdi buna çok yakınsınız ve bu sorunun iyi yazıldığı gibi birkaç yukarı oy çekeceğinden şüpheleniyorum. Zamanla gelecekler. Bahsetmem gereken başka bir şey var, burada böyle bir zaman anlayışımız yok - soruların cevaplanması daha uzun sürdü, ancak hızlı ve temel yanıtlardan daha kaliteli bir şekilde. İnsanları yavaş ya da bunun gibi bir şey olmaya teşvik ettiğimiz için değil, zamana duyarlı bir şekilde başarılmış bir şeye ihtiyacınız varsa, bahislerinizi burada gerçekleşmekte olanlara karşı korumak iyi bir fikir değildir, çünkü buna odaklanmadığımız için
Clive

Yanıtlar:


1

Bu noktada bir yanıt almanız gerekip gerekmediğinden emin değilsiniz (veya bu bir yanıtsa bile), ancak "Bir ziyaretçi hesap oluşturduğunda e-posta doğrulaması iste" açık gibi görünüyor mu?

Resminizde, ikinci pencerede (drupal_set_message () iletisini gördüğünüz yer), bir e-postanın gönderildiğini ve tam ileti almak için talimatları izlemeniz gerektiğini söyler.

Bunu kapatmak için / admin / config / people / accounts adresine gidin ve ziyaretçi bir hesap oluşturduğunda e-posta doğrulaması iste onay kutusunun işaretini kaldırın.

Veritabanındaki kullanıcı tablosuna bakarsanız, durum sütununda etkin için 1, devre dışı için 0 (e-postadaki bağlantıyı tıklamamış demektir) gösterilmelidir.

Umarım yardımcı olur!


Kayıtlı kullanıcıları varsayılan olarak etkin hale
getirseniz

0

Benim için iyi çalışıyor aşağıdaki kodu kullanabilirsiniz

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

kullanıcı e-posta kimliğini ve şifresini geçtikten sonra oturum kimliği, oturum adı, jeton, kullanıcı uid'i gibi gerekli tüm değerleri döndürür


Bu yüzden hala geçerli oturumu yeni oturumlar ama eklenen oturumları tablosundaki herhangi bir kayıt oluşturur
Mohammed GOMMA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.