register.json उपयोगकर्ता को लॉगिन नहीं करता है या उपयोगकर्ता के सत्र / टोकन / पासवर्ड को वापस नहीं करता है


9

मैंने यहां सूचीबद्ध करने के लिए बहुत अधिक भिन्नताएं आजमाई हैं, लेकिन मूल बिंदु यह है कि मैं सेवाओं के माध्यम से पंजीकरण के तुरंत बाद उपयोगकर्ता को लॉग इन नहीं कर सकता। मैंने एक नया Drupal 7.33 स्थापित करने का प्रयास किया है जिसमें केवल सेवाएँ 7.x.3.11 सक्षम हैं और ड्रुपलगैप 7.x.1.9 द्वारा प्रदान की गई डिफ़ॉल्ट संसाधन सेटिंग्स

जब मैं Drupal इंटरफ़ेस का उपयोग करके पंजीकरण करता हूं, तो उपयोगकर्ता बनाया जाता है, सत्र खोला जाता है, और मैं अपने प्रोफ़ाइल पृष्ठ पर लॉग इन करता हूं।

बनाम

जब मैं सेवा समाप्ति बिंदु कहता हूं /services/user/register.json, तो Drupal खाता बनाता है लेकिन सत्र जारी नहीं रहता है। नीचे मेरे स्क्रीनशॉट देखें।

यहां छवि विवरण दर्ज करें

मैं या तो ए को सत्र सेवा संसाधन कॉल के लिए बने रहने के लिए सत्र प्राप्त कर सकता हूं या उपयोगकर्ता के ऑटो-जनरेट किए गए पासवर्ड को वापस जॉन्स रिस्पांस में जोड़ने के लिए बी हुक दे सकता हूं ताकि मैं प्रोग्राम / क्लाइंट / साइड फॉर्म को पुनः सबमिट कर सकूं। बनी रहती है)?

यह सवाल कि 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');

@ क्लिक करें, क्या यह यहां सॉलिसिट पेड मदद के संदर्भ में है?
EAT

यह @EliATaylor है, मैं सिर्फ एक टिप्पणी छोड़ रहा था। हम केवल सवाल और जवाब में रुचि रखते हैं , यहां कुछ भी (सॉलिटिंग सशुल्क काम, ट्यूटोरियल के लिंक के लिए पूछना, या मूल रूप से ज्यादातर अन्य चीजें जो ऑफ-साइट होती हैं) उस से एक व्याकुलता है और कुछ जिसके खिलाफ हम गार्ड करते हैं। हम वास्तव में चाहते हैं कि एक अच्छा सवाल है (जो हमें यहां मिल गया है, भयानक) और एक अच्छा जवाब (जो उम्मीद है कि आपको मिलेगा)
क्लाइव

यहाँ शिकायत करने के लिए आपने कई बार मेरी मदद की है, लेकिन @ @ give। हम उस बातचीत को ऑफ़लाइन ले जा सकते हैं और इस स्क्रीन को अव्यवस्थित नहीं कर सकते हैं सिवाय एक बार जब हम इसे हल करते हैं। यहाँ भी, मुझे चैट फीचर का उपयोग करने की प्रतिष्ठा नहीं है। क्या मैं StackOverflow से कुछ व्यापार कर सकता हूँ? रेपो से मेरे गिठब का लिंक भी नहीं?
EAT

1
यहां तक ​​कि :) बहुत कम हम एक समर्थन मंच नहीं हैं, और जो कुछ भी "सवाल" या "जवाब" नहीं है, वह ड्रुपल के बारे में ज्ञान का एक उच्च गुणवत्ता वाला भंडार बनाने के हमारे मिशन के खिलाफ जाता है। प्रश्न का उत्तर देने के लिए जो कुछ भी आवश्यक है, वह प्रश्न में ही होना चाहिए, क्योंकि यदि ऐसा नहीं है, तो यह प्रश्न बेकार हो जाता है जैसे ही ऑफ-साइट लिंक मृत हो जाते हैं, या समस्या ठीक हो जाती है। नियम मनमाने लग सकते हैं, या कठोर भी हो सकते हैं, लेकिन वे स्टैक एक्सचेंज मॉडल द्वारा कई वर्षों से पूरे के रूप में आवश्यक साबित हुए हैं। अगर आपको याद यह है बस क्यू + एक यहाँ, कोई समस्या हो नहीं करेंगे
क्लाइव

चैटिंग के लिए अपने प्रतिनिधि के बारे में - अब आप उसके बहुत करीब हैं, और मुझे संदेह है कि यह सवाल कुछ अपवाह को आकर्षित करेगा क्योंकि यह अच्छी तरह से लिखा गया है। वे समय के साथ आएंगे। यह दूसरी बात है जिसका मुझे उल्लेख करना चाहिए, हमारे यहाँ समय का कोई मतलब नहीं है - हम बल्कि सवालों का जवाब देने में अधिक समय लेते थे, लेकिन त्वरित और बुनियादी प्रतिक्रियाओं की तुलना में उच्च गुणवत्ता वाले तरीके से। ऐसा नहीं है कि हम लोगों को धीमा या ऐसा कुछ भी करने के लिए प्रोत्साहित करते हैं, लेकिन अगर आपको समय-संवेदनशील तरीके से कुछ पूरा करने की आवश्यकता है, तो यहां होने वाले अपने दांव को हेज करने के लिए एक अच्छा विचार नहीं है, क्योंकि हम इस पर ध्यान केंद्रित नहीं कर रहे हैं
क्लाइव

जवाबों:


1

सुनिश्चित नहीं हैं कि आपको इस बिंदु पर उत्तर की आवश्यकता है (या यदि यह एक भी है), लेकिन ऐसा लगता है कि आपके पास "ई-मेल सत्यापन की आवश्यकता है जब कोई आगंतुक खाता बनाता है" चालू?

आपकी छवि में, दूसरी विंडो में (जहां आप drupal_set_message () से संदेश देखते हैं), यह कहता है कि एक ईमेल भेजा गया था और आपको पूर्ण संदेश प्राप्त करने के लिए निर्देशों का पालन करने की आवश्यकता होगी।

इसे बंद करने के लिए, / व्यवस्थापक / कॉन्फ़िगरेशन / लोगों / खातों पर नेविगेट करें और आगंतुक द्वारा खाता बनाते समय ई-मेल सत्यापन को अनचेक करें।

यदि आप डेटाबेस में उपयोगकर्ता तालिका को देखते हैं, तो स्थिति कॉलम को सक्षम के लिए 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.