www.gusucode.com > baigo CMS PHP开源网站管理系统 v1.2.2源码程序 > baigocms_v1.2.2/bg_sso/core/model/verify.class.php
<?php /*----------------------------------------------------------------- !!!!警告!!!! 以下为系统文件,请勿修改 -----------------------------------------------------------------*/ //不能非法包含或直接执行 if(!defined("IN_BAIGO")) { exit("Access Denied"); } /*-------------验证模型-------------*/ class MODEL_VERIFY { private $obj_db; public $verifyStatus = array(); function __construct() { //构造函数 $this->obj_db = $GLOBALS["obj_db"]; //设置数据库对象 } /** 创建表 * mdl_create function. * * @access public * @return void */ function mdl_create_table() { foreach ($this->verifyStatus as $_key=>$_value) { $_arr_status[] = $_key; } $_str_status = implode("','", $_arr_status); $_arr_verifyCreate = array( "verify_id" => "int NOT NULL AUTO_INCREMENT COMMENT 'ID'", "verify_user_id" => "int NOT NULL COMMENT '用户 ID'", "verify_token" => "char(32) NOT NULL COMMENT '访问口令'", "verify_token_expire" => "int NOT NULL COMMENT '口令过期时间'", "verify_rand" => "char(6) NOT NULL COMMENT '随机串'", "verify_mail" => "varchar(300) NOT NULL COMMENT '待验证邮箱'", "verify_status" => "enum('" . $_str_status . "') NOT NULL COMMENT '状态'", "verify_time" => "int NOT NULL COMMENT '发起时间'", "verify_time_refresh" => "int NOT NULL COMMENT '更新时间'", "verify_time_disable" => "int NOT NULL COMMENT '使用时间'", ); $_num_mysql = $this->obj_db->create_table(BG_DB_TABLE . "verify", $_arr_verifyCreate, "verify_id", "验证"); if ($_num_mysql > 0) { $_str_alert = "y120105"; //更新成功 } else { $_str_alert = "x120105"; //更新成功 } return array( "alert" => $_str_alert, //更新成功 ); } /** 列出字段 * mdl_column function. * * @access public * @return void */ function mdl_column() { $_arr_colRows = $this->obj_db->show_columns(BG_DB_TABLE . "verify"); foreach ($_arr_colRows as $_key=>$_value) { $_arr_col[] = $_value["Field"]; } return $_arr_col; } /** 提交 * mdl_submit function. * * @access public * @return void */ function mdl_submit($num_userId, $str_mail) { $_arr_verifyRow = $this->mdl_read($num_userId, "verify_user_id"); $_str_rand = fn_rand(6); $_str_token = fn_rand(32); $_str_tokenDo = fn_baigoEncrypt($_str_token, $_str_rand); $_arr_verifyData = array( "verify_user_id" => $num_userId, "verify_mail" => $str_mail, "verify_token" => $_str_token, "verify_rand" => $_str_rand, "verify_token_expire" => time() + BG_VERIFY_EXPIRE * 60, "verify_status" => "enable", "verify_time_refresh" => time(), ); if ($_arr_verifyRow["alert"] == "x120102") { $_arr_verifyData["verify_time"] = time(); $_num_verifyId = $this->obj_db->insert(BG_DB_TABLE . "verify", $_arr_verifyData); //更新数据 if ($_num_verifyId > 0) { $_str_alert = "y120101"; //更新成功 } else { return array( "alert" => "x120101", //更新失败 ); } } else { $_num_verifyId = $_arr_verifyRow["verify_id"]; $_num_mysql = $this->obj_db->update(BG_DB_TABLE . "verify", $_arr_verifyData, "verify_id=" . $_num_verifyId); //更新数据 if ($_num_mysql > 0) { $_str_alert = "y120103"; //更新成功 } else { return array( "alert" => "x120103", //更新失败 ); } } return array( "verify_id" => $_num_verifyId, "verify_token" => $_str_tokenDo, "alert" => $_str_alert, //成功 ); } /** 失效 * mdl_disable function. * * @access public * @return void */ function mdl_disable() { $_arr_verifyUpdate = array( "verify_status" => "disable", "verify_time_disable" => time(), ); $_num_mysql = $this->obj_db->update(BG_DB_TABLE . "verify", $_arr_verifyUpdate, "verify_id=" . $this->verifySubmit["verify_id"]); //如影响行数大于0则返回成功 if ($_num_mysql > 0) { $_str_alert = "y120103"; //成功 } else { $_str_alert = "x120103"; //失败 } return array( "alert" => $_str_alert, ); } /** 更改状态 * mdl_status function. * * @access public * @param mixed $str_status * @return void */ function mdl_status($str_status) { $_str_verifyId = implode(",", $this->verifyIds["verify_ids"]); $_arr_verifyUpdate = array( "verify_status" => $str_status, ); $_num_mysql = $this->obj_db->update(BG_DB_TABLE . "verify", $_arr_verifyUpdate, "verify_id IN (" . $_str_verifyId . ")"); //删除数据 //如影响行数大于0则返回成功 if ($_num_mysql > 0) { $_str_alert = "y120103"; //成功 } else { $_str_alert = "x120103"; //失败 } return array( "alert" => $_str_alert, ); } /** 读取 * mdl_read function. * * @access public * @param mixed $str_verify * @param string $str_by (default: "verify_id") * @param int $num_notId (default: 0) * @return void */ function mdl_read($str_verify, $str_by = "verify_id") { $_arr_verifySelect = array( "verify_id", "verify_user_id", "verify_token", "verify_token_expire", "verify_mail", "verify_status", "verify_rand", "verify_time", "verify_time_refresh", "verify_time_disable", ); if (is_numeric($str_verify)) { $_str_sqlWhere = $str_by . "=" . $str_verify; } else { $_str_sqlWhere = $str_by . "='" . $str_verify . "'"; } $_arr_verifyRows = $this->obj_db->select(BG_DB_TABLE . "verify", $_arr_verifySelect, $_str_sqlWhere, "", "", 1, 0); //检查本地表是否存在记录 if (isset($_arr_verifyRows[0])) { //用户名不存在则返回错误 $_arr_verifyRow = $_arr_verifyRows[0]; } else { return array( "alert" => "x120102", //不存在记录 ); } if ($_arr_verifyRow["verify_token_expire"] < time()) { $_arr_verifyRow["verify_status"] = "expired"; } $_arr_verifyRow["alert"] = "y120102"; return $_arr_verifyRow; } /** 列出 * mdl_list function. * * @access public * @param mixed $num_no * @param int $num_except (default: 0) * @return void */ function mdl_list($num_no, $num_except = 0) { $_arr_verifySelect = array( "verify_id", "verify_user_id", "verify_token", "verify_token_expire", "verify_mail", "verify_status", "verify_time", "verify_time_refresh", "verify_time_disable", ); $_arr_verifyRows = $this->obj_db->select(BG_DB_TABLE . "verify", $_arr_verifySelect, "", "", "verify_id DESC", $num_no, $num_except); //查询数据 foreach ($_arr_verifyRows as $_key=>$_value) { if ($_value["verify_token_expire"] < time()) { $_arr_verifyRows[$_key]["verify_status"] = "expired"; } } return $_arr_verifyRows; } /** 计数 * mdl_count function. * * @access public * @return void */ function mdl_count() { $_num_verifyCount = $this->obj_db->count(BG_DB_TABLE . "verify"); //查询数据 return $_num_verifyCount; } /** 删除 * mdl_del function. * * @access public * @return void */ function mdl_del() { $_str_verifyId = implode(",", $this->verifyIds["verify_ids"]); $_num_mysql = $this->obj_db->delete(BG_DB_TABLE . "verify", "verify_id IN (" . $_str_verifyId . ")"); //删除数据 //如车影响行数小于0则返回错误 if ($_num_mysql > 0) { $_str_alert = "y120104"; //成功 } else { $_str_alert = "x120104"; //失败 } return array( "alert" => $_str_alert, ); } /** 表单验证 * input_verify function. * * @access public * @return void */ function input_verify() { if (!fn_token("chk")) { //令牌 return array( "alert" => "x030206", ); } $_arr_verifyId = validateStr(fn_post("verify_id"), 1, 0); switch ($_arr_verifyId["status"]) { case "too_short": return array( "alert" => "x120201", ); break; case "ok": $this->verifySubmit["verify_id"] = $_arr_verifyId["str"]; break; } $_arr_verifyToken = validateStr(fn_post("verify_token"), 1, 0); switch ($_arr_verifyToken["status"]) { case "too_short": return array( "alert" => "x120202", ); break; case "ok": $this->verifySubmit["verify_token"] = $_arr_verifyToken["str"]; break; } $this->verifySubmit["alert"] = "ok"; return $this->verifySubmit; } /** 选择 verify * input_ids function. * * @access public * @return void */ function input_ids() { if (!fn_token("chk")) { //令牌 return array( "alert" => "x030206", ); } $_arr_verifyIds = fn_post("verify_ids"); if ($_arr_verifyIds) { foreach ($_arr_verifyIds as $_key=>$_value) { $_arr_verifyIds[$_key] = fn_getSafe($_value, "int", 0); } $_str_alert = "ok"; } else { $_str_alert = "x030202"; } $this->verifyIds = array( "alert" => $_str_alert, "verify_ids" => $_arr_verifyIds ); return $this->verifyIds; } }