数据库新增一个字段is_role
因为没有注册页面,所以需要我们手动新建一个账号 以下是生成一个密码出来
// 登录
public function login(Request $request)
{
$password = Hash::make('123456');
dd($password);
return view('auth.login');
}
浏览器登录页刷新,复制到数据库 user表的密码中
定义中间件
php artisan make:middleware AdminMiddleware
App/Http/Middleware/AdminMiddleware.php
public function handle(Request $request, Closure $next): Response
{
if(Auth::check())
{
if($request->user()->is_role == 1)
{
return $next($request);
}
else
{
Auth::logout();
return redirect()->route('/');
}
}
else
{
Auth::logout();
return redirect()->route('/');
}
}
注册中间件
bootstrap/app.php
$middleware->alias([
'admin' => \App\Http\Middleware\AdminMiddleware::class,
]);
使用模板,我们可以通过调用 alias() 添加新的中间件别名:
在添加中间件之前,你需要更多的隐含知识,而不是一个易于阅读的Kernel.php 文件。
路由
// 执行登录
Route::post('login_post', [AuthController::class, 'login_post'])->name('admin.login_post');
// 账号退出
Route::get('logout', [AuthController::class, 'logout'])->name('admin.logout');
Route::group(['middleware' => 'admin'], function () {
// 后台首页
Route::get('admin/dashboard', [DashboardController::class, 'dashboard'])->name('admin.dashboard');
});
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use App\Mail\ForgotPasswordMail;
class AuthController extends Controller
{
// 登录
public function login(Request $request)
{
return view('auth.login');
}
// 执行登录
public function login_post(Request $request)
{
if (Auth::attempt([
'email' => $request->email,
'password' => $request->password
])) {
if ($request->user()->is_role == '1') {
// 认证通过
return redirect()->intended(route('admin.dashboard'));
} else {
// 认证失败
return redirect()->back()->with('error', '电子邮件/密码不正确');
}
} else {
return redirect()->back()->with('error', '电子邮件/密码不正确');
}
}
}
表单验证文件
resources/views/_message.blade.php
{{-- 表单成功验证 --}}
@if(!empty(session('success')))
<div class="alert alert-success" role="alert">
{{ Session('success') }}
</div>
@endif
{{-- session函数来与用户会话中的错误信息 --}}
@if(!empty(session('error')))
<div class="alert alert-danger" role="alert">
{{ Session('error') }}
</div>
@endif
前端模版
登录也路由 表单验证 字段
@extends('layouts.app')
@section('title', '登录')
@section('content')
<div class="card mb-3">
<div class="card-body">
<div class="pt-4 pb-2">
{{-- 表单验证文件 --}}
@include('_message')
<h5 class="card-title text-center pb-0 fs-4">登录您的帐户</h5>
<p class="text-center small">输入您的用户名 & 密码登录</p>
</div>
<form method="post" action="{{ route('admin.login_post') }}" class="row g-3 needs-validation" novalidate>
@csrf
<div class="col-12">
<label for="yourUsername" class="form-label">电子邮箱</label>
<div class="input-group has-validation">
<span class="input-group-text" id="inputGroupPrepend">@</span>
<input type="email" name="email" class="form-control" required value="{{ old('email') }}">
<div class="invalid-feedback">请输入您的邮箱.</div>
</div>
</div>
<div class="col-12">
<label class="form-label">密码</label>
<input type="password" name="password" class="form-control" required>
<div class="invalid-feedback">请输入您的密码!</div>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" value="true">
<label class="form-check-label" for="rememberMe">记住我</label>
</div>
</div>
<div class="col-12">
<button class="btn btn-primary w-100" type="submit">登录</button>
</div>
<div class="col-12">
<p class="small mb-0">忘记密码?
<a href="/forgot">忘记账户</a>
</p>
</div>
</form>
</div>
</div>
@endsection
resources/views/layouts/_header.blade.php 绑定账号退出按钮方法
<li>
<a class="dropdown-item d-flex align-items-center" href="{{ route('admin.logout') }}">
<i class="bi bi-box-arrow-right"></i>
<span>注销</span>
</a>
</li>