我正在尝试学习PHP并设置基于用户访问权限的网站。我终于找到了一个模板,该模板大多易于使用和实现。但是,经过数小时的努力来修改模板之后,我不得不恳请帮助。
以下代码效果很好,并且我修改了原始模板,以便能够使用电子邮件地址作为用户名和数据库中存储的密码进行登录。原始模板基于用户名登录,而不使用电子邮件地址。我现在想要实现的目标是,以某种方式还包含来自同一数据库和表的“用户名”字段,并将其存储为$ username参数,以在站点上的其他地方(例如,与“ echo”一起使用)使用。我仍然想使用该字段,但要使用注册成员的姓名,而不是用于登录的用户名。
我敢肯定有一个简单的方法,但是无论我如何更改,我都会收到错误消息,而且我似乎根本还不了解语法。
<?php
include('password.php');
class User extends Password{
private $_db;
function __construct($db){
parent::__construct();
$this->_db = $db;
}
private function get_user_hash($email){
try {
$stmt = $this->_db->prepare('SELECT password FROM members WHERE email = :email AND active="Yes"');
$stmt->execute(array('email' => $email));
$row = $stmt->fetch();
return $row['password'];
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}
public function login($email,$password){
$hashed = $this->get_user_hash($email);
if($this->password_verify($password,$hashed) == 1){
$_SESSION['loggedin'] = true;
return true;
}
}
public function logout(){
session_destroy();
}
public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
return true;
}
}
}
?>
您只需要稍微扩展代码即可。
目前您的查询仅带出1个字段,即密码。
SELECT * FROM members WHERE email = :email AND active="Yes"
然后,这将返回整行,而不仅仅是一个字段。
然后,您可以提取用户名并将其放在会话变量中,如下所示:
$_SESSION['username'] = $row['username'];
然后您就可以在网站的其余部分中使用它。确保您session_start();
要访问会话变量的所有文件的开头。如果要使用其他字段,则只需将参数更改为'firstName'
,或将其更改为'fullName'
其他名称即可。
另外,您还可以扩展查询,以允许用户通过添加电子邮件或用户名登录。
SELECT * FROM members WHERE (email = :email OR username = :email) AND active="Yes"
如果您要这样做,则ID建议将:email
持有人更改为更明智的内容:user
,以使阅读代码更有意义。
编辑
您将需要让您的get_user_hash()
函数$row
全部返回,然后从那里添加您的会话变量。它有点后退,因为这可能不是我见过的最好的登录脚本。
在get_user_hash()
,更改
return $row['password'];
到
return $row;
然后在功能登录中,
public function login($email,$password){
$row = $this->get_user_hash($email);
$hashed = $row['password'];
if($this->password_verify($password,$hashed) == 1){
$_SESSION['username'] = $row['username'];
$_SESSION['loggedin'] = true;
return true;
}
}
实际上,$hashed
无非就是password_verify()
用来比较数据库中加密密码的用户密码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句