register.json tidak login pengguna atau mengembalikan sesi / token / kata sandi pengguna


9

Saya telah mencoba terlalu banyak variasi untuk dicantumkan di sini, tetapi intinya adalah saya tidak bisa mendapatkan pengguna login segera setelah pendaftaran melalui Layanan. Saya telah mencoba instalasi Drupal 7.33 yang baru dengan hanya mengaktifkan Layanan 7.x.3.11 dan pengaturan sumber daya standar yang disediakan oleh drupalgap 7.x.1.9

Ketika saya mendaftar menggunakan antarmuka Drupal, pengguna dibuat, sesi dibuka, dan saya mendarat di halaman profil saya login.

vs.

Ketika saya menelepon titik akhir Layanan /services/user/register.json, Drupal membuat akun tetapi sesi tidak berlanjut. Lihat tangkapan layar saya di bawah ini.

masukkan deskripsi gambar di sini

Bagaimana saya bisa A. mendapatkan sesi untuk bertahan untuk panggilan sumber daya Layanan berikutnya ATAU B. kait untuk menambahkan kata sandi pengguna atau yang dihasilkan secara otomatis kembali ke respons json sehingga saya secara program dapat mengirimkan kembali bentuk klien sisi /login.json (yang tidak bertahan)?

Pertanyaan ini, bagaimana mungkin pengguna global $ berbeda antara antarmuka Drupal dan modul Layanan? menjelaskan masalah saya yang sama menggunakan LoginToboggan.

Di tangkapan layar saya, Anda akan melihat baris debug yang disebut "login debug". Itu berasal dari baris 333 dari "/sites/all/modules/logintoboggan/logintoboggan.module" di mana saya sudah mencoba semua ini tetapi tidak berhasil ...

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, apakah melanggar persyaratan untuk meminta bantuan berbayar di sini?
MAKAN

Itu adalah @EliATaylor, saya baru saja meninggalkan komentar. Kami hanya tertarik pada pertanyaan dan jawabannya di sini , hal lain (meminta pekerjaan berbayar, meminta tautan ke tutorial, atau pada dasarnya sebagian besar hal lain yang terjadi di luar situs) adalah gangguan dari itu dan sesuatu yang kami jaga. Yang kami inginkan hanyalah pertanyaan yang bagus (yang kami dapatkan di sini, luar biasa) dan jawaban yang baik (yang semoga Anda dapatkan)
Clive

Anda telah banyak membantu saya untuk mengeluh di sini, tetapi astaga @clive. saya bisa menjadikan percakapan itu offline dan tidak mengacaukan layar ini kecuali setelah kami menyelesaikannya. Juga di sini, saya bahkan tidak memiliki reputasi untuk menggunakan fitur obrolan. Bisakah saya memperdagangkan beberapa dari StackOverflow? Bahkan tidak menautkan tautan github saya ke repo?
MAKAN

1
Bahkan tidak :) Cukup sederhana kami bukan forum dukungan, dan apa pun yang bukan "pertanyaan" atau "jawaban" bertentangan dengan misi kami untuk membuat repositori pengetahuan berkualitas tinggi tentang Drupal. Apa pun yang diperlukan untuk menjawab pertanyaan harus ada dalam pertanyaan itu sendiri, karena jika tidak, pertanyaan itu menjadi tidak berguna segera setelah tautan di luar situs mati, atau masalahnya diperbaiki. Aturannya mungkin tampak sewenang-wenang, atau bahkan keras, tetapi mereka telah terbukti perlu oleh model Stack Exchange secara keseluruhan selama beberapa tahun sekarang. Jika Anda ingat itu hanya Q + A di sini, tidak akan pernah ada masalah
Clive

Mengenai perwakilan Anda untuk mengobrol - Anda sangat dekat dengan itu sekarang, dan saya kira pertanyaan ini akan menarik beberapa upvotes karena ditulis dengan baik. Mereka akan datang dengan waktu. Itu hal lain yang harus saya sebutkan, kami tidak punya waktu di sini - kami lebih suka pertanyaan membutuhkan waktu lebih lama untuk menjawab tetapi dengan kualitas yang lebih tinggi daripada tanggapan cepat dan mendasar. Bukannya kami mendorong orang untuk lambat atau hal seperti itu, tetapi jika Anda membutuhkan sesuatu yang dilakukan dengan cara yang peka terhadap waktu, itu bukan ide yang baik untuk melakukan lindung nilai taruhan Anda atas hal yang terjadi di sini, karena kami tidak fokus pada hal itu
Clive

Jawaban:


1

Tidak yakin apakah Anda memerlukan jawaban pada saat ini (atau jika ini bahkan satu), tetapi sepertinya Anda memiliki "Membutuhkan verifikasi email ketika pengunjung membuat akun" dihidupkan?

Di gambar Anda, di jendela kedua (di mana Anda melihat pesan dari drupal_set_message ()), ia mengatakan bahwa email telah dikirim dan Anda harus mengikuti instruksi untuk mendapatkan pesan lengkap.

Untuk mematikannya, navigasikan ke / admin / config / people / accounts dan hapus centang Memerlukan verifikasi email ketika pengunjung membuat akun.

Jika Anda melihat tabel pengguna di database, kolom status harus menunjukkan 1 untuk diaktifkan, 0 untuk dinonaktifkan (artinya dia belum mengklik tautan di email).

Semoga ini bisa membantu!


Itu tidak berfungsi bahkan jika Anda membuat pengguna terdaftar aktif secara default
Mohammed Gomma

0

Ini berfungsi baik bagi saya Anda dapat menggunakan kode berikut

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

lulus id email pengguna dan kata sandi maka akan mengembalikan semua nilai yang diperlukan seperti id sesi, nama sesi, token, uid pengguna


Ini menciptakan sesi baru tetapi tidak ada catatan dalam tabel sesi dimasukkan, Jadi masih tidak ada sesi yang valid
Mohammed Gomma
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.