又是新的一年了,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.csdn.net/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:祝大家,元旦快乐~~