📌  相关文章
📜  使用电子邮件或用户名登录 codeigniter 4 - PHP (1)

📅  最后修改于: 2023-12-03 15:06:57.637000             🧑  作者: Mango

使用电子邮件或用户名登录 CodeIgniter 4 - PHP

简介

CodeIgniter 4 是一个基于 MVC 模式开发的轻量级框架,其核心原则之一就是“简单而功能强大”。在 CodeIgniter 4 中,提供了一种轻松实现电子邮件或用户名登录的方法,本文将介绍如何在 CodeIgniter 4 中实现此功能。

前置条件
  • 已有 CodeIgniter 4 框架环境。
  • 已有用户表(可以是 MySQL、PostgreSQL 等)。
实现流程
  1. 创建登录页面,包括用户名和密码等字段。
  2. 在控制器中编写验证代码,判断用户输入的用户名或邮箱是否符合规则。
  3. 使用 Model 查询用户表,根据用户名或邮箱查询用户信息。
  4. 根据查询结果,判断用户输入的密码是否正确。
  5. 若正确,则登录成功,跳转到想要的页面。
代码实现
HTML / PHP 部分
<!-- 登录表单 -->
<form action="<?php echo site_url('login/index'); ?>" method="post">
  <label for="email">邮箱 / 用户名</label>
  <input type="text" name="email" id="email" required>
  <label for="password">密码</label>
  <input type="password" name="password" id="password" required>
  <input type="submit" value="登录">
</form>
控制器部分
namespace App\Controllers;

use App\Models\UserModel;
use CodeIgniter\Controller;

class Login extends Controller
{
  public function index()
  {
    // 获取用户输入数据
    $email = $this->request->getPost('email');
    $password = $this->request->getPost('password');

    // 验证邮箱或用户名
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $where = ['email' => $email];
    } else {
      $where = ['username' => $email];
    }

    // 查询用户信息
    $userModel = new UserModel();
    $user = $userModel->where($where)->first();

    // 判断用户密码是否正确
    if ($user && password_verify($password, $user['password'])) {
      // 登录成功,重定向到主页
      return redirect()->to('/');
    } else {
      // 登录失败,显示错误信息
      return view('login', ['error' => '用户名或密码错误!']);
    }
  }
}
Model 部分
namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
  protected $table = 'user'; // 用户表名

  // 用户表字段
  protected $allowedFields = ['id', 'username', 'email', 'password'];

  public function getUserByEmail($email)
  {
    $query = $this->db->table($this->table)->getWhere(['email' => $email]);
    return $query->getRow();
  }

  public function getUserByUsername($username)
  {
    $query = $this->db->table($this->table)->getWhere(['username' => $username]);
    return $query->getRow();
  }
}
总结

使用电子邮件或用户名登录 Codeigniter 4 比较简单,主要依赖于 Codeigniter 4 自带的路由和查询数据库的方法,需要注意的是在登录成功后的跳转链接到达对应的控制器下再进行处理,如:跳转到主页控制器。