首先,我们需要使用以下命令下载新的 laravel 应用程序。
composer create-project laravel/laravel laravel-multi-auth
现在,转到项目目录。
cd laravel-multi-auth
1-) 设置数据库连接
建立数据库连接,打开 .env 文件并定义您的数据库详细信息,这使 laravel 和数据库之间达成共识。
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=laravelDB_USERNAME=rootDB_PASSWORD=
2-) 设置迁移和模型
接下来,使用迁移文件在 users 表中添加 is_admin 列。 因此,打开位于 Database/migration 上的 created_users_table.php 迁移文件,并为管理员更新以下字段。
<?php use Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema; return new class extends Migration{ /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->tinyInteger('type')->default(0); /* Users: 0=>User, 1=>Admin, 2=>Manager */ $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); }};
接下来打开 app/User.php 并在此处更新以下字段名称 is_admin:
<?phpnamespace App\Models;use Illuminate\Contracts\Auth\MustVerifyEmail;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;use Laravel\Sanctum\HasApiTokens;use Illuminate\Database\Eloquent\Casts\Attribute;class User extends Authenticatable{use HasApiTokens, HasFactory, Notifiable;protected $fillable = ['name','email','password','type'];protected $hidden = ['password','remember_token',];protected $casts = ['email_verified_at' => 'datetime',];protected function type(): Attribute{return new Attribute(get: fn ($value) => ["user", "admin", "manager"][$value],);}}
现在,添加 is_admin 之后将使用以下命令将此字段创建到数据库中。
php artisan migrate
现在,创建一个内置的身份验证系统。 使用以下命令在 laravel 中创建默认的身份验证系统。 并将 laravel 内置身份验证系统更改为多身份验证系统
此命令将为 Laravel 登录身份验证和注册创建路由、控制器和视图文件。 意思是提供一个基本的 laravel 登录认证和注册完整系统。 让我们打开命令提示符并键入以下命令。
3-) 然后使用以下命令在您的项目中安装 laravel 9 UI:
composer require laravel/ui
现在,在终端上执行以下命令来创建登录、注册、忘记密码和重置密码刀片文件:
php artisan ui bootstrap --auth
然后执行以下命令:
npm installnpm run dev
4-) 创建用户访问中间件
在这一步中,我们需要创建限制用户访问该页面的用户访问中间件。 所以让我们创建和更新代码。
php artisan make:middleware UserAccess
app/Http/middleware/UserAccess.php
<?phpnamespace App\Http\Middleware;use Closure;use Illuminate\Http\Request;class UserAccess{/*** Handle an incoming request.** @param \Illuminate\Http\Request $request* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse*/public function handle(Request $request, Closure $next, $userType){if(auth()->user()->type == $userType){return $next($request);}return response()->json(['You do not have permission to access for this page.']);/* return response()->view('errors.check-permission'); */}}
app/Http/Kernel.php
....protected $routeMiddleware = ['auth' => \App\Http\Middleware\Authenticate::class,'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,'can' => \Illuminate\Auth\Middleware\Authorize::class,'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,'user-access' => \App\Http\Middleware\UserAccess::class,];....
5-) 创建路线
在这里,我们将添加以下路由组,您可以在其中为用户、管理员和经理访问创建新路由。 让我们更新代码:
routes/web.php
<?phpuse Illuminate\Support\Facades\Route;use App\Http\Controllers\HomeController;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/', function () {return view('welcome');});Auth::routes();/*--------------------------------------------------------------------------------------All Normal Users Routes List----------------------------------------------------------------------------------------*/Route::middleware(['auth', 'user-access:user'])->group(function () {Route::get('/home', [HomeController::class, 'index'])->name('home');});/*--------------------------------------------------------------------------------------All Admin Routes List----------------------------------------------------------------------------------------*/Route::middleware(['auth', 'user-access:admin'])->group(function () {Route::get('/admin/home', [HomeController::class, 'adminHome'])->name('admin.home');});/*--------------------------------------------------------------------------------------All Admin Routes List----------------------------------------------------------------------------------------*/Route::middleware(['auth', 'user-access:manager'])->group(function () {Route::get('/manager/home', [HomeController::class, 'managerHome'])->name('manager.home');});
6-) 更新控制器
在这里,我们需要为 HomeController 中的管理路由添加 adminHome() 和 managerHome 方法。 所以让我们像下面这样添加:
app/Http/Controllers/HomeController.php
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class HomeController extends Controller{public function __construct(){$this->middleware('auth');}public function index(){return view('home');}public function adminHome(){return view('adminHome');}public function managerHome(){return view('managerHome');}}
7-) 配置 Blade 视图
打开预定义的 resources/views/home.blade.php 文件并在文件中插入基础代码。
@extends('layouts.app')@section('content')<div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Dashboard</div> <div class="card-body"> @if(session('login-success')) <div class="alert alert-success" role="alert"> {{ session('login-success') }} </div> @endif @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif You are normal user. </div> </div> </div> </div></div>@endsection
创建并打开 resources/views/admin-home.blade.php 文件并添加代码。
@extends('layouts.app')@section('content')<div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Dashboard</div> <div class="card-body"> @if(session('login-success')) <div class="alert alert-success" role="alert"> {{ session('login-success') }} </div> @endif @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif You are admin. </div> </div> </div> </div></div>@endsection
8-) 配置登录控制器
在这一步中,我们将配置 LoginController 类,定义 login() 方法并插入以下代码。 它处理服务器端验证,如果登录用户是管理员,则重定向到管理仪表板。
在 app/Http/Controllers/Auth/LoginController.php 文件中加入以下代码
<?phpnamespace App\Http\Controllers\Auth;use App\Http\Controllers\Controller;use App\Providers\RouteServiceProvider;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Illuminate\Http\Request;class LoginController extends Controller{ /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required' ]); $credentials = $request->only('email', 'password'); if(! auth()->attempt($credentials)){ return redirect()->route('login') ->with('error','Email-Address And Password Are Wrong.'); } if (auth()->user()->is_admin == 1) { return redirect()->route('admin.home'); } return redirect()->route('home'); }}
9-) 使用 Seeder 创建虚拟数据
因此,使用以下命令创建一个用户播种器:
php artisan make:seeder UsersSeeder
现在,打开 database/seeds/UsersSeeder.php 文件并插入以下数据。
<?phpnamespace Database\Seeders;use Illuminate\Database\Seeder;use Illuminate\Support\Facades\Hash;use App\Models\User;class UsersSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { $usersData = [ [ 'name' =>'Admin', 'email' =>'admin@example.com', 'is_admin' => 1, 'password' => Hash::make('12345678') ], [ 'name' => 'User', 'email' => 'user@example.com', 'is_admin' => 0, 'password' => Hash::make('12345678') ], ]; foreach ($usersData as $key => $val) { User::create($val); } }}
10-) 运行 Laravel Multi Auth App & Test
使用下面给出的命令调用 laravel 多身份验证应用程序。
php artisan serve
在浏览器上打开以下 URL:http://127.0.0.1:8000/login
管理仪表板:
将以下凭据用于管理仪表板:
Email: admin@example.comPassword: 12345678
在这里,您将在使用管理员角色登录后看到此视图
用户仪表板:
将以下凭据用于管理仪表板:
Email: user@example.comPassword: 12345678
在这里,您将在使用普通用户登录后看到此视图
我希望你一步一步喜欢 laravel 多认证教程。 所以,不要忘记与他人分享,祝你有美好的一天。
关注七爪网,获取更多APP/小程序/网站源码资源!
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除