Php 针对不同类型用户的单一登录页面
我正在开发一个应用程序,它允许用户注册为类别1或类别2或两者。简单地说,用户可以使用相同的详细信息在类别1下注册,也可以在类别2下注册 有了这一点,我想到了一些在数据库中存储用户详细信息的方法:Php 针对不同类型用户的单一登录页面,php,mysql,Php,Mysql,我正在开发一个应用程序,它允许用户注册为类别1或类别2或两者。简单地说,用户可以使用相同的详细信息在类别1下注册,也可以在类别2下注册 有了这一点,我想到了一些在数据库中存储用户详细信息的方法: 使用单个表,在其中我将使用角色或权限区分类别 使用两个表,我将根据用户的选择(注册后)将用户存储在各自的表中 在考虑以下事项后: 用户可以选择在这两个类别中注册 用户可以决定对这两个类别使用相同的详细信息 我得出一个结论,我的选择一不会给我想要的 现在,在我的代码中,我创建了我的User类,用于注册
- 用户可以选择在这两个类别中注册
- 用户可以决定对这两个类别使用相同的详细信息李>
User
类,用于注册和登录用户
class User {
private $_db,
$_data,
$_sessionName,
$_isLoggedIn;
public function __construct($user = null) {
$this->_db = DB::getInstance();
$this->_sessionName = Config::get('session/session_name');
if(!$user) {
if( Session::exists($this->_sessionName) ) {
$user = Session::get($this->_sessionName);
if( $this->find($user) ){
$this->_isLogggedIn = true;
} else {
$this->logout();
}
}
} else {
$this->find($user);
}
}
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'email';
if ( $packageType == 'category1' ) {
$fCheck = $this->_db->get('table_name', array($field, '=', $user));
if( $fCheck->count() ) {
$this->_data = $fCheck->first();
return true;
}
}
elseif ( $packageType == 'category2' ) {
$iCheck = $this->_db->get('table_name', array($field, '=', $user));
if($iCheck->count()) {
$this->_data = $iCheck->first();
return true;
}
}
}
return false;
}
public function login($userInput = null, $password = null) {
$user = $this->find($userInput);
if($user) {
if(password_verify($password, $this->data()->password)) {
Session::put($this->_sessionName, $this->data()->id);
return true;
}
}
return false;
}
public function logout() {
Session::delete($this->_sessionName);
}
public function data() {
return $this->_data;
}
public function isLoggedIn() {
return $this->_isLogggedIn;
}
}
使用单个表时,代码不必在我的find()
方法中定义或检查$packageType
,但正如我指出的,我需要将它用于不同的表
我现在遇到的问题是如何使用user
类检查用户登录的特定包,并获取该特定表的相应用户详细信息
任何帮助都将不胜感激。TL;DR:制定一个解决方案,使用您现有的两个选项来更好地组织系统中的信息 使用数据库当前的方式(仅两个表),必须在两个表上找到用户。这意味着您首先搜索其中一个,如果找不到用户,则搜索另一个。这意味着您必须找出一个优先级系统,其中一个表的优先级高于另一个表 然而,正如你之前所说: 我得出一个结论,我的选择一不会给我想要的 它实际上并不能完全解决您的问题,因为您需要您的用户以一个用户名登录,并且可以访问这两个类别 因此,由于第一个选项只能解决一半的问题,让我们检查另一个。
选项2为用户使用一个表。这很好,因为这意味着每个用户都有一个用户名。但是,您的需求需要两个表(可能category1有category2没有的东西,或者category2没有的东西),所以这不适合 因为选项1是解决方案的一半,选项2是另一半,所以让我们同时使用这两个选项 您的数据库现在将有三个表:category1表、category2表和用户表。您的类别表将包含特定于您的类别的用户信息,并且您的用户表将包含每个用户的用户名和密码信息。
您的类别表没有主键,只有外键(引用用户表的主键)。登录时,您的系统必须询问用户希望登录到哪个类别。在他选择一个类别后,您可以根据用户选择的类别1或类别2搜索用户信息 就这样!您现在有了一个登录系统,该系统支持具有多个权限级别和用户信息的多个用户