laravel
i添加一个或多个用户表,以admin为例。
部分文件内容可能需要根据实际情况修改
推荐:
laravel教程
创建一个Admin模型
编写admins表字段
编辑admin模型
修改auth.php配置文件
在app/Http/Controllers下创建目录Admin/Auth
在Admin目录下创建文件HomeController.php(这个文件用来测试登录成功后的跳转页面)
使用命令生成一个Request
此时在app/Http/Request目录下便生成了这个文件,然后编辑这个文件
在Admin/Auth目录下创建文件LoginController.php
添加路由。打开app/providers/RouteServiceProvider.php
在方法mapWebRoutes()方法后面增加一个方法
在map()方法里调用上面增加的方法
在routes目录下增加一个路由文件admin.php
Laravel 13.2.0
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
下载
把home.blade.php复制到resources/views/admin下
把layouts/app.blade.php复制为layouts/admin.blade.php,修改相应的地方
把login.blade.php复制到admin/Auth目录下
数据填充
编辑AdminsTableSeeder.php
文件上传至服务器,登入服务器,执行填充命令
此时,直接打开http://xxx/admin并不会跳转到http://xxx/admin/login,因此需要处理一些异常。打开app/Exceptions/Handle.php
重写unauthenticated()方法。
完善一下
以上代码,当admin登录后,再次访问/admin/login这个URI时,会自动跳转到/home这个URI,这是因为guest这个中间件默认跳转到了/home,也就是middleware目录下的RedirectIfAuthenticated.php这个文件。
解决方法为:
创建一个中单件,名为:RedirectIfAdminAuthenticated
编辑这个文件:
php artisan make:model Admin -mSchema::create('admins', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});'guards' => [
...
'admin' => [
'driver' => 'session',
'provider' => 'admins'
]
],
'providers' => [
...
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],middleware('auth:admin');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('admin.home');
}
}php artisan make:request AdminLoginRequest 'required',
'password' => ['required', 'min:6'] //密码必须,最小长度为6
];
}
}only('name', 'password');
$result = Auth::guard('admin')->attempt($data, true);
if ($result) {
return redirect(route('admin.home'));
} else {
return redirect()->back()
->with('name', $loginRequest->get('name'))
->withErrors(['name' => '用户名或密码错误']);
}
}
public function postLogout()
{
Auth::guard('admin')->logout();
return redirect(route('admin.login.show'));
}
}protected function mapAdminWebRoutes()
{
Route::middleware('web')
->prefix('admin')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}public function map()
{
$this->mapApiRoutes();
$this->mapAdminWebRoutes();//调用新增的方法
$this->mapWebRoutes();
}middleware('guest:admin')
->name('admin.login.show');
Route::get('/','Admin\HomeController@index')
->name('admin.home');
Route::post('login','Admin\Auth\LoginController@postLogin')
->middleware('guest:admin')
->name('admin.login.post');
Route::post('logout','Admin\Auth\LoginController@postLogout')
->middleware('auth:admin')
->name('admin.logout');@extends('layouts.admin')
@section('content')
Admin Login
@endsectionphp artisan make:seed AdminsTableSeederpublic function run()
{
\App\Admin::insert([
'name'=>'yzha5',
'password'=> bcrypt('123456')
]);
}
DatabaseSeeder.php
$this->call(AdminsTableSeeder::class);php artisan migrate
php artisan db:seeduse Illuminate\Support\Facades\Route;
protected function unauthenticated($request, AuthenticationException $exception)
{
return starts_with(Route::currentRouteName(), 'admin')
? redirect(route('admin.login.show'))
: parent::unauthenticated($request, $exception);
}php artisan make:middleware RedirectIfAdminAuthenticatedcheck()) {
return redirect('/admin');
}
return $next($request);
}
}
在Kernel.php中添加一行
protected $routeMiddleware = [
...
'admin.guest' => \App\Http\Middleware\RedirectIfAdminAuthenticated::class,
...
];
更改admin路由,将guest:admin改为admin.guest:admin
Route::get('login','Admin\Auth\LoginController@showLoginForm')
->middleware('admin.guest:admin')
->name('admin.login.show');
Route::post('login','Admin\Auth\LoginController@postLogin')
->middleware('admin.guest:admin')
->name('admin.login.post');