Phpbb 3 पर साइट और फ़ोरम उपयोगकर्ताओं का एकीकरण

हाल ही में, phpbb3 वेबसाइट और फ़ोरम को जल्दी से एकीकृत करने की आवश्यकता उत्पन्न हुई। Googling, मुझे एक सामान्य उदाहरण नहीं मिला। मुझे खुद लिखना था। शायद कोई काम आएगा।

तो, अपने प्राधिकरण प्रणाली के साथ एक साइट होने दो। मौजूदा उपयोगकर्ता आधार के एकीकरण के साथ समस्याओं के त्वरित (और संभवतः भी सही) समाधान के साथ एक phpbb फोरम को जोड़ना आवश्यक है। नए उपयोगकर्ताओं का प्राधिकरण और पंजीकरण साइट पर होता रहेगा, पहले से पंजीकृत उपयोगकर्ता ही मंच पर पहुंचेंगे। मंच पर पंजीकरण और प्राधिकरण बंद हो जाएगा।

शुरू करने के लिए, नए उपयोगकर्ताओं को पंजीकृत करने की क्षमता को अक्षम करें:
ऐसा करने के लिए, व्यवस्थापक खाते में "सामान्य" टैब पर जाएं, और बाएं मेनू में "उपयोगकर्ता पंजीकरण" चुनें। अगला, पंजीकरण बंद करें:

छवि

तो, चलो हमारे प्लगइन लिखना शुरू करते हैं:

सभी प्राधिकरण प्लगइन्स को फोरम उपनिर्देशिका में संग्रहीत किया जाता है जिसमें शामिल हैं / ओट /। वहाँ पहले से ही कई प्लगइन्स फ़ाइलें हैं मानक standard_db के अलावा। अपना प्लगइन जोड़ें: इसे Cort_simple कहा जाए। यह महत्वपूर्ण है कि फ़ाइल का नाम निहित कार्यों के नामों को निर्धारित करेगा। फ़ाइल को शामिल करें / शामिल करें / schem_simple.php।

कम से कम, हमारी फ़ाइल में एक फ़ंक्शन होना चाहिए

login_simple (और $ उपयोगकर्ता नाम, और $ पासवर्ड)

फ़ंक्शन को इस सामग्री की एक सरणी वापस करनी चाहिए:

array( 'status' => LOGIN_SUCCESS, //   'error_msg' => false, //   'user_row' => array( 'user_id' => $row['user_id'], //   phpbb 'username' => $row['username'], //    'user_password' => $row['user_password'], // phpbb-  'user_email' => $row['user_email'], // E-mail ,   'user_type' => 0, //  (\   ..) 'group_id' => 2 //    ) ); 


सब कुछ स्पष्ट प्रतीत होता है, लेकिन एक उचित सवाल यह उठ सकता है - यदि उपयोगकर्ता अभी तक मंच पर पंजीकृत नहीं है, तो 'user_id' कहाँ प्राप्त करें? उत्तर भी सरल है: यदि उपयोगकर्ता अभी तक पंजीकृत नहीं है, तो आपको 'स्थिति' कुंजी का मान बदलकर LOGIN_SUCCESS_CREATE_PROFILE करना चाहिए। इस स्थिति में, उपयोगकर्ता स्वचालित रूप से बनाया जाएगा।

दूसरे, हमारे प्राधिकरण प्लगइन में एक फ़ंक्शन होना चाहिए जो स्वचालित रूप से मंच पर एक उपयोगकर्ता को पंजीकृत और अधिकृत करेगा जब वे पहली बार मंच पर आते हैं:

autologin_simple ()

फ़ंक्शन को वर्तमान उपयोगकर्ता के बारे में सभी जानकारी के साथ एक साहचर्य सरणी वापस करना चाहिए।

मैं तुरंत कहूंगा कि हमारा उदाहरण इस उपयोगकर्ता को पंजीकृत करेगा:

 function get_user_data() { $result['user_email'] = “user@example.com”; $result['username'] = “username”; $result['user_password'] = “user_password”; return $result; } 


वास्तविक मामले में, यह फ़ंक्शन वास्तविक साइट के वर्तमान उपयोगकर्ता के सत्र से डेटा स्थानांतरित करेगा।
तो, हमारे प्लगइन फ़ाइल की सामग्री:

 <?php /** * *     phpBB3 * */ if (!defined('IN_PHPBB')) { exit; } /** *      */ function get_user_data() { $result['user_email'] = “user@example.com”; $result['username'] = “username”; $result['user_password'] = “user_password”; return $result; } /** * ,   . */ function login_simple(&$username, &$password) { $auth = get_user_data(); //    if (!is_array($auth) || empty($auth)) { return array( 'status' => LOGIN_ERROR_USERNAME, //    ACCESS_DIRECTLY_DENIDED     language/<language>/common.php 'error_msg' => 'ACCESS_DIRECTLY_DENIDED', 'user_row' => array('user_id' => ANONYMOUS), ); } global $db; $sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type FROM ' . USERS_TABLE . " WHERE username_clean = '" . $db->sql_escape($auth['username']) . "'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if ($row){ $res = array( 'status' => LOGIN_SUCCESS, 'error_msg' => false, 'user_row' => array( 'user_id' => $row['user_id'], 'username' => $row['username'], //    'user_password' => $row['user_password'], // phpbb-  'user_email' => $row['user_email'], // E-mail ,   'user_type' => 0, 'group_id' => 2 ) ); return $res; } // ,    . $res = array( 'status' => LOGIN_SUCCESS_CREATE_PROFILE, 'error_msg' => false, 'user_row' => array( "username" => $auth['username'], //    "user_password" => phpbb_hash($auth['user_password']), // phpbb-  "user_email" => $auth['user_email'], // E-mail ,   "user_type" => 0, "group_id" => 2 ), ); return $res; } /** * ,         . */ function autologin_simple() { //        ,   $u = ""; $user_row = login_simple($u, $u); //      if ($user_row['status'] == LOGIN_SUCCESS_CREATE_PROFILE) { global $phpbb_root_path, $phpEx; if (!function_exists('user_add')) { include($phpbb_root_path . 'includes/functions_user.' . $phpEx); } $user_row['user_row']['user_id'] = user_add($user_row['user_row']); } //    global $db; $sql = 'SELECT * FROM ' . USERS_TABLE . " WHERE user_id = '" . $db->sql_escape($user_row['user_row']['user_id']) . "'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); return $row; } ?> 

संदर्भ

Source: https://habr.com/ru/post/In150872/


All Articles