【Magento】magento与phpbb同时登录与注册。

由于需求,公司需要把magento和phpbb登录注册联合起来。所以,写了一个需求。

首先在根目录下创建一个forum文件夹,用于存放Phpbb源程序。

然后在根目录下建立一下loginphpbb.php文件。

loginphpbb.php

<?php
/*
*论坛同步程序
*/

define('IN_PHPBB', true);

//同步登陆论坛
function forumLogin($username, $password, $admin = false)
{
   global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user;
   
   $ss = array();
   $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/';
   $phpEx = substr(strrchr(__FILE__, '.'), 1);

   require_once($phpbb_root_path.'common.php');
   require_once($phpbb_root_path.'includes/functions_user.php');
   require_once($phpbb_root_path.'includes/functions_module.php');

   $_REQUEST['username'] = $_POST['username'] = $username;
   $_REQUEST['password'] = $_POST['password'] = $password;   
   $password   = request_var('password', '', true);
   $username   = request_var('username', '', true);
   
   $user->session_begin();
   $auth->acl($user->data);
   $user->setup();

   $_REQUEST['sid'] = $_POST['sid']= $user->session_id;
   
   $autologin   = false;
   $viewonline = 1;
   $admin       = ($admin) ? 1 : 0;
   $viewonline = ($admin) ? $user->data['session_viewonline'] : $viewonline;   

   $auth->login($username, $password, $autologin, $viewonline, $admin);

    if($admin){
      $result = $db->sql_query("Select session_id  From gr_bbs_sessions  where session_user_id = '2' order by session_time desc");
      $ss = $db->sql_fetchrow($result);
   }

    return $ss[session_id];
}

//同步退出论坛
function forumLogout()
{
   global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user;

   $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/';
   $phpEx = substr(strrchr(__FILE__, '.'), 1);

   require_once($phpbb_root_path.'common.php');
   require_once($phpbb_root_path.'includes/functions_user.php');
   require_once($phpbb_root_path.'includes/functions_module.php');

   $user->session_kill();
   $user->session_begin();

}

//同步注册论坛会员
function forumRegister($user_name, $password, $email, $coppa = false)
{
   global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user;

   $_REQUEST['username'] = $_POST['username']=$user_name;
   $_REQUEST['email'] = $_REQUEST['email_confirm'] = $_POST['email']= $_POST['email_confirm']= $email;
   $_REQUEST['new_password'] = $_REQUEST['password_confirm'] = $_POST['new_password']= $_POST['password_confirm']= $password;

   $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/';
   $phpEx = substr(strrchr(__FILE__, '.'), 1);

   require_once($phpbb_root_path.'common.php');
   require_once($phpbb_root_path.'includes/functions_user.php');
   require_once($phpbb_root_path.'includes/functions_module.php');

   // Start session management
   $user->session_begin();
   $auth->acl($user->data);
   $user->setup();

   $timezone = date('Z') / 3600;
   $is_dst = date('I');

   if ($config['board_timezone'] == $timezone || $config['board_timezone'] == ($timezone - 1))
   {
      $timezone = ($is_dst) ? $timezone - 1 : $timezone;

      if (!isset($user->lang['tz_zones'][(string) $timezone]))
      {
         $timezone = $config['board_timezone'];
      }
   }
   else
   {
      $is_dst = $config['board_dst'];
      $timezone = $config['board_timezone'];
   }

   $data = array(
      'username'         => utf8_normalize_nfc(request_var('username', '', true)),
      'new_password'      => request_var('new_password', '', true),
      'password_confirm'   => request_var('password_confirm', '', true),
      'email'            => strtolower(request_var('email', '')),
      'email_confirm'      => strtolower(request_var('email_confirm', '')),
      'lang'            => basename(request_var('lang', $user->lang_name)),
      'tz'            => request_var('tz', (float) $timezone),
   );

   $server_url = generate_board_url();
   // Which group by default?
   $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';

   $sql = 'SELECT group_id
      FROM ' . GROUPS_TABLE . "
      WHERE group_name = '" . $db->sql_escape($group_name) . "'
         AND group_type = " . GROUP_SPECIAL;
   $result = $db->sql_query($sql);
   $row = $db->sql_fetchrow($result);
   $db->sql_freeresult($result);

   $group_id = $row['group_id'];

   if (($coppa ||
      $config['require_activation'] == USER_ACTIVATION_SELF ||
      $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
   {
      $user_actkey = gen_rand_string(10);
      $key_len = 54 - (strlen($server_url));
      $key_len = ($key_len < 6) ? 6 : $key_len;
      $user_actkey = substr($user_actkey, 0, $key_len);

      $user_type = USER_INACTIVE;
      $user_inactive_reason = INACTIVE_REGISTER;
      $user_inactive_time = time();
   }
   else
   {
      $user_type = USER_NORMAL;
      $user_actkey = '';
      $user_inactive_reason = 0;
      $user_inactive_time = 0;
   }

   $user_row = array(
      'username'            => $data['username'],
      'user_password'         => phpbb_hash($data['new_password']),
      'user_email'         => $data['email'],
      'group_id'            => (int) $group_id,
      'user_timezone'         => (float) $data['tz'],
      'user_dst'            => $is_dst,
      'user_lang'            => $data['lang'],
      'user_type'            => $user_type,
      'user_actkey'         => $user_actkey,
      'user_ip'            => $user->ip,
      'user_regdate'         => time(),
      'user_inactive_reason'   => $user_inactive_reason,
      'user_inactive_time'   => $user_inactive_time,
   );

   // Register user...
   $user_id = user_add($user_row);

   if($user_id){
      forumLogin($data[username],$data[new_password],false);
   }

}

  然后再更改magneto程序:

 app\code\core\Mage\Customer\controllers\AccountController.php

大约是在174行,

在$this->_loginPostRedirect();前面添加:

         $phpbbname = explode('@',$login['username']);
         include('/web/loginphpbb.php');
         forumLogin($phpbbname[0],$login['password']);

在355行,$this->_redirectSuccess($url);前面添加

$phpbbname = explode('@',$this->getRequest()->getPost('email'));
include('/web/loginphpbb.php');
forumRegister($phpbbname[0],$this->getRequest()->getPost('password'),$this->getRequest()->getPost('email'));

然后测试一下,OK。

值得注意的是,在phpbb后台,要记得把cookie关掉。

你可能感兴趣的:(【Magento】magento与phpbb同时登录与注册。)