小明:老师,我们学校的管理系统一直缺少一个统一的身份认证功能,这导致每次登录不同的系统都要重新注册账号。您觉得我们应该怎么解决这个问题呢?
老师:这是一个很常见的问题。我们可以设计一个统一的身份认证系统(UIS),它将作为所有服务的中央入口点。用户只需一次登录即可访问所有授权的服务。
小明:明白了!那我们是否可以利用现有的数据库来存储这些信息?
老师:当然可以。首先我们需要创建一个用户表(users),其中包括用户名、密码哈希值以及角色等字段。
小明:好的,这是我的初步SQL语句:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
role ENUM('student', 'teacher') DEFAULT 'student'
);
老师:很好。接下来,我们要编写一个简单的登录验证脚本。例如使用PHP语言:
session_start();
include 'db.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 查询数据库
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password_hash'])) {
$_SESSION['user_id'] = $user['id'];
header('Location: dashboard.php');
} else {
echo "Invalid credentials.";
}
}
?>
小明:现在我们有了认证系统,那么关于排行榜的功能呢?
老师:为了展示学生的成绩或活动参与度,我们可以建立一个排行榜模块。首先定义一个成绩表(scores)。
CREATE TABLE scores (
user_id INT NOT NULL,
score INT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
小明:然后我们可以根据分数排序显示学生排名。
SELECT u.username, s.score
FROM users u JOIN scores s ON u.id = s.user_id
ORDER BY s.score DESC;
老师:对的。这样就完成了基本的统一身份认证和排行榜功能的搭建。
]]>