thinkphp6实现多类型账户登录详细代码
时间: 2024-03-08 14:47:49 浏览: 19
实现多类型账户登录需要先确定不同类型账户的登录方式和认证规则。下面提供一种实现方式,以普通用户和管理员用户为例。
1. 创建控制器
在app/controller目录下创建一个Login.php控制器,用于处理登录请求。代码如下:
```php
<?php
namespace app\controller;
use think\facade\View;
use think\facade\Session;
use app\model\User;
class Login
{
// 显示登录页面
public function index()
{
return View::fetch('login');
}
// 处理登录请求
public function doLogin()
{
// 获取登录类型
$type = input('post.type');
// 获取登录信息
$username = input('post.username');
$password = input('post.password');
// 根据类型进行认证
switch ($type) {
case 'user':
$user = User::where('username', $username)->find();
if ($user && $user->password == md5($password)) {
Session::set('user_id', $user->id);
return redirect('/user/index');
} else {
return redirect('/login');
}
break;
case 'admin':
// 管理员登录认证规则
break;
default:
return redirect('/login');
}
}
}
```
在上面的代码中,index方法用于显示登录页面,doLogin方法用于处理登录请求。根据不同类型进行认证,如果认证成功,则设置用户ID到Session中,并跳转到对应页面;如果认证失败,则返回登录页面。
2. 创建路由
在app/route目录下创建一个route.php文件,用于定义路由。代码如下:
```php
<?php
use think\facade\Route;
// 显示登录页面
Route::get('login', 'Login/index');
// 处理登录请求
Route::post('login', 'Login/doLogin');
// 普通用户页面
Route::get('user/index', 'User/index')->middleware('LoginCheck');
// 管理员页面
Route::get('admin/index', 'Admin/index')->middleware('AdminCheck');
```
在上面的代码中,使用Route::get和Route::post方法定义路由。Login/index和Login/doLogin分别对应Login控制器的index和doLogin方法。
3. 创建中间件
在app/middleware目录下创建一个LoginCheck.php中间件,用于验证普通用户是否已登录。代码如下:
```php
<?php
namespace app\middleware;
use think\facade\Session;
class LoginCheck
{
public function handle($request, \Closure $next)
{
if (!Session::has('user_id')) {
return redirect('/login');
}
return $next($request);
}
}
```
在上面的代码中,如果Session中不存在user_id,则跳转到登录页面。
4. 注册中间件
在app/middleware.php文件中注册中间件:
```php
return [
// 注册中间件
'LoginCheck' => \app\middleware\LoginCheck::class
];
```
5. 创建模型
在app/model目录下创建一个User.php模型,用于处理用户相关操作。代码如下:
```php
<?php
namespace app\model;
use think\Model;
class User extends Model
{
// 设置表名
protected $table = 'user';
}
```
在上面的代码中,$table属性用于指定表名。
以上就是实现多类型账户登录的详细代码实现。使用以上代码可以实现普通用户和管理员用户的登录认证。根据实际需求,可以对代码进行调整和优化。