register.json ไม่ได้เข้าสู่ระบบผู้ใช้หรือส่งคืนเซสชั่น / โทเค็น / รหัสผ่านของผู้ใช้


9

ฉันลองใช้ชุดรูปแบบหลายรายการมากเกินไป แต่ประเด็นพื้นฐานคือฉันไม่สามารถให้ผู้ใช้เข้าสู่ระบบได้ทันทีหลังจากลงทะเบียนผ่านบริการ ฉันได้ลองติดตั้ง Drupal 7.33 ใหม่โดยเปิดใช้งาน Services 7.x.3.11 เท่านั้นและการตั้งค่าทรัพยากรเริ่มต้นที่ให้โดย drupalgap 7.x.1.9

เมื่อฉันลงทะเบียนโดยใช้อินเทอร์เฟซ Drupal ผู้ใช้จะถูกสร้างขึ้นเซสชันจะเปิดขึ้นและฉันเข้าสู่หน้าโปรไฟล์ของฉันที่ล็อกอิน

เมื่อเทียบกับ

เมื่อฉันเรียกใช้บริการจุดสิ้นสุด/services/user/register.jsonDrupal สร้างบัญชี แต่เซสชันไม่คงอยู่ ดูภาพหน้าจอของฉันด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะทำอย่างไร A. ให้เซสชันคงอยู่สำหรับการเรียกใช้บริการทรัพยากรต่อมาหรือ B. hook เพื่อเพิ่มรหัสผ่านของผู้ใช้หรือสร้างขึ้นอัตโนมัติกลับเข้าสู่การตอบสนองของ json ดังนั้นฉันจึงสามารถส่งโปรแกรมไคลเอนต์ /login.json อีกครั้ง ยังคงมีอยู่)

คำถามนี้ผู้ใช้ $ ทั่วโลกจะแตกต่างกันอย่างไรระหว่างอินเทอร์เฟซ Drupal และโมดูลบริการ อธิบายถึงปัญหาเดียวกันของฉันโดยใช้ 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 ฉันแค่แสดงความคิดเห็น เราสนใจเฉพาะคำถามและคำตอบที่นี่สิ่งอื่น ๆ (การเรี่ยไรเงินงานขอลิงค์ไปยังบทเรียนหรือโดยทั่วไปสิ่งอื่น ๆ ที่เกิดขึ้นนอกสถานที่) เป็นสิ่งที่ทำให้ไขว้เขวจากสิ่งนั้นและสิ่งที่เราป้องกัน ทั้งหมดที่เราต้องการคือคำถามที่ดี (ซึ่งเราได้มาที่นี่สุดยอด) และคำตอบที่ดี (ซึ่งหวังว่าคุณจะได้รับ)
ไคลฟ์

คุณช่วยฉันหลายครั้งเกินไปที่จะบ่นที่นี่ แต่เอ้ย @clive ฉันสามารถสนทนาแบบออฟไลน์และไม่ถ่วงหน้าจอนี้ยกเว้นเมื่อเราแก้ไข นอกจากนี้ที่นี่ฉันยังไม่มีชื่อเสียงในการใช้คุณลักษณะการแชท ฉันสามารถแลกเปลี่ยนบางส่วนจาก StackOverflow ได้หรือไม่ ไม่เชื่อมโยงลิงค์ git ของฉันไปยัง repo ด้วยซ้ำ?
กิน

1
ไม่แม้แต่ :) ค่อนข้างง่ายเราไม่ใช่ฟอรัมสนับสนุนและสิ่งที่ไม่ใช่ "คำถาม" หรือ "คำตอบ" ขัดต่อภารกิจของเราในการสร้างแหล่งเก็บความรู้คุณภาพสูงเกี่ยวกับ Drupal สิ่งใดที่จำเป็นในการตอบคำถามจะต้องอยู่ในคำถามเพราะถ้าเป็นเช่นนั้นคำถามนั้นจะไร้ประโยชน์ทันทีที่ลิงก์นอกไซต์หายไปหรือปัญหาได้รับการแก้ไขแล้ว กฎอาจดูเป็นกฎเกณฑ์หรือรุนแรงแม้กระทั่ง แต่ได้รับการพิสูจน์แล้วว่าจำเป็นโดยรูปแบบ Stack Exchange โดยรวมในช่วงหลายปีที่ผ่านมา หากคุณจำได้ว่ามันเป็นแค่ Q + A ที่นี่จะไม่มีปัญหาเลย
ไคลฟ์

เกี่ยวกับตัวแทนของคุณสำหรับการแชท - ตอนนี้คุณสนิทมากแล้วและฉันสงสัยว่าคำถามนี้จะดึงดูดผู้อัปโหลดจำนวนมากเพราะมันเขียนได้ดี พวกเขาจะมาพร้อมกับเวลา นั่นคือสิ่งอื่น ๆ ที่ฉันควรพูดถึงเราไม่มีเวลาที่จะทำเช่นนี้ - เราต้องการที่จะตอบคำถามนานกว่า แต่ในทางที่มีคุณภาพสูงกว่าการตอบสนองที่รวดเร็วและพื้นฐาน ไม่ใช่ว่าเราสนับสนุนให้คนทำช้าหรืออะไรแบบนั้น แต่ถ้าคุณต้องการบางสิ่งบางอย่างที่ประสบความสำเร็จตามเวลาที่กำหนดคุณไม่ควรป้องกันการเดิมพันของคุณที่เกิดขึ้นที่นี่เนื่องจากเราไม่ได้มุ่งเน้นไปที่
ไคลฟ์

คำตอบ:


1

ไม่แน่ใจว่าคุณต้องการคำตอบ ณ จุดนี้ (หรือหากเป็นแบบนี้แม้แต่ครั้งเดียว) แต่ดูเหมือนว่าคุณมี "ต้องมีการยืนยันอีเมลเมื่อผู้เข้าชมสร้างบัญชี" เปิดอยู่หรือไม่

ในภาพของคุณในหน้าต่างที่สอง (ที่คุณเห็นข้อความจาก drupal_set_message ()) กล่าวว่ามีการส่งอีเมลและคุณจะต้องทำตามคำแนะนำเพื่อรับข้อความเต็ม

หากต้องการปิดการใช้งานนี้ให้ไปที่/ admin / config / people / accountsและยกเลิกการเลือกต้องการการยืนยันอีเมลเมื่อผู้เยี่ยมชมสร้างบัญชี

หากคุณดูตารางผู้ใช้ในฐานข้อมูลคอลัมน์สถานะควรแสดง 1 สำหรับเปิดใช้งาน, 0 สำหรับปิดใช้งาน (หมายความว่าเขาไม่ได้คลิกที่ลิงก์ในอีเมล)

หวังว่ามันจะช่วย!


มันไม่ทำงานแม้ว่าคุณจะทำให้ผู้ใช้ที่ลงทะเบียนใช้งานโดยค่าเริ่มต้น
Mohammed Gomma

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


มันสร้างเซสชันใหม่ แต่ไม่มีการบันทึกในตารางเซสชันดังนั้นจึงยังไม่มีเซสชันที่ถูกต้อง
Mohammed Gomma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.