又是新的一年了,2013,在这里祝大家元旦快乐!!
正题,phpbb3是一个很不错的php论坛,界面也很不错,性能也好
但我想让它和我的网站整合在一起,用户数据完全就用论坛的数据,怎么弄呢
去谷歌搜了几天,发现都只有2010年和2007年的帖子,来自phpbb的官网
这个网址是:https://www.phpbb.com/kb/article/phpbb3-cross-site-sessions-integration/
其实说的也很明确了,只是本人初用phpbb,不太熟悉环境
这里只实现了登陆,却没有完成登陆,因为url缺少一个session id
即url上的sid=......
例如:http://localhost/phpBB3/index.php?sid=4de4ef4b260097b0ce6f0852908bd26d
当然也可以自己去动态生成一个sid,网上也有方法,但我没有测试过,等有时间再补上
后来又去找了下,找到一个比较靠谱的
http://www.freewebcomponent.com/sample/phpBB/Login/phpBB_Integration_in_our_own_website.html
但后来又发现竟然不需要密码直接登陆。。。囧了
由于代码比较简洁,就直接在他的基础上加入了密码验证
首先假设我们的根目录是 localhost/phpBB3/
文件名1:auth_ok.php 路径: localhost/phpBB3/includes/auth/
这个文件用于重载系统的一个函数:
文件内容如下:
<?php
function login_ok(&$username, &$password)
{
global $db, $config;
$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
return array(
'status' => LOGIN_SUCCESS,
'error_msg' => false,
'user_row' => $row,
);
}
?>
文件名2:class.phpBB.php 路径: localhost/phpBB3/includes/
这里是现实功能的主要文件,里面写了一个类,用于登陆和注册
文件内容如下:(这里对原作者的代码进行了部分修改)
<?php
/*-------------------------------------------------------------------------------------
Script Name: class.phpBB.php
Script Version: 1.0
Author: Tony Wei ( tonywei123@gmail.com )
Blog: www.FreeWebComponent.com
Description: phpBB operation
Revision History:
1.0: original version 2010/4/18
-------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------
Script Name: class.phpBB.php
Script Version: 2.0
Author: Backgarden_Neo ( h20549304@gmail.com )
Blog: blog.youkuaiyun.com/backgarden_straw
Description: phpBB operation of verification login
Revision History:
1.0: original version 2010/4/18
2.0: first version 2013/1/1
-------------------------------------------------------------------------------------*/
// You may put phpBB directory name here
define( "PHPBB_PATH", "phpBB3" );
class phpBB {
// -------------------------------------------------------------------------------------------------
// Default constructor
// -------------------------------------------------------------------------------------------------
function phpBB()
{
}
// -------------------------------------------------------------------------------------------------
// Login: Just pass username, than redirect to forum homepage
// -------------------------------------------------------------------------------------------------
function Login( $user_name,$user_password,$user_remember = true, $is_redirect = true )
{
global $config, $user, $auth,$db;
// do not allow empty password
if (!$user_password)
{
return array(
'status' => LOGIN_ERROR_PASSWORD,
'error_msg' => 'NO_PASSWORD_SUPPLIED',
'user_row' => array('user_id' => ANONYMOUS),
);
}
if (!$user_name)
{
return array(
'status' => LOGIN_ERROR_USERNAME,
'error_msg' => 'LOGIN_ERROR_USERNAME',
'user_row' => array('user_id' => ANONYMOUS),
);
}
// Use login_ok function to override original login_db function in auth_db.php
$config[ "auth_method" ] = "ok";
// Start session management
$user->session_begin();
$auth->acl( $user->data );
$user->setup( "ucp" );
//进行一次选择,数据库里有的时候才进行登录
$username_clean_name = utf8_clean_string($user_name);
$username_clean_password = utf8_clean_string($user_password);
$username_clean_remember = utf8_clean_string($$user_remember);
$hash = phpbb_hash($username_clean_password);
$sql = 'SELECT user_id,user_password FROM ' . USERS_TABLE . "
WHERE username = '" .$user_name . "' ORDER BY user_id DESC LIMIT 1";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if(phpbb_check_hash($username_clean_password,$row['user_password'])){
$result = $auth->login( $user_name, $username_clean_password, $username_clean_remember, 1, 0 );
$redirect = "/" . PHPBB_PATH . "/index.php";
$redirect = reapply_sid( $redirect );
header("Location:".$redirect);exit;
}else{
echo "your password is wrong,please check your passwrod!";
}
//
}
// -------------------------------------------------------------------------------------------------
// Register: Create a new phpBB user
// -------------------------------------------------------------------------------------------------
function Register( $user_name, $user_password, $user_email )
{
echo $user_password;
$user_row = array();
$user_row["username"] = $user_name;
$user_row["user_password"] = phpbb_hash( $user_password );
$user_row["user_email"] = $user_email;
$user_row["group_id"] = "2";
$user_row["user_timezone"] = "8"; // You may change default timezone here
$user_row["user_dst"] = "0";
$user_row["user_lang"] = "zh_cmn_hant"; // You may change default language here
$user_row["user_type"] = "0";
$user_row["user_actkey"] = "";
$user_row["user_ip"] = $_SERVER["REMOTE_ADDR"];
$user_row["user_regdate"] = time();
$user_row["user_inactive_reason"] = "0";
$user_row["user_inactive_time"] = "0";
$user_row["user_new"] = "1";
$user_id = user_add( $user_row, array() );
echo " ".$user_row["user_password"];
}
} // End of class phpBB
?>
文件名3:login_session.php 路径 localhost/phpBB3/testphpbb/session/
文件内容如下:
<?php
require_once("../phpbb.php");
require_once( "../../includes/class.phpBB.php");
$phpBB = new phpBB();
$return_value = $phpBB->Login( "your name","your password");
?>
文件名4:phpbb.php 路径: localhost/phpBB3/testphpbb/
这个phpbb.php主要用于完成环境变量和一些头文件的引用
主要内容如下:
<?php
define('ROOT_PATH', "../"); // map this dir to your own installation of phpbb
define('IN_PHPBB', true);
if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) exit();
$phpEx = "php";
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '../';
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'config.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
require_once( $phpbb_root_path . "includes/functions." . $phpEx );
require_once( $phpbb_root_path . "includes/functions_user." . $phpEx );
require_once( $phpbb_root_path . "includes/functions_module." . $phpEx );
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$user->setup('viewforum');
?>
文件名5:register_demo.php 路径: localhost/phpBB3/testphpbb/session/
文件内容如下:
<?
require_once("../phpbb.php");
require_once( "../../includes/class.phpBB.php");
$phpBB = new phpBB();
$phpBB->Register( "your name", "your password", "your email" );
print "Register success!";
?>
后面还要加入语法插件,syntax highlight的加入,当然有需要就再找,会陆续写文章的
ps:祝大家,元旦快乐~~