由于需求,公司需要把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关掉。
(责任编辑:最模板) |