七爪源码:如何在 Laravel 9 应用程序中创建多重身份验证

发布一下 0 0
七爪源码:如何在 Laravel 9 应用程序中创建多重身份验证

首先,我们需要使用以下命令下载新的 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

在这里,您将在使用管理员角色登录后看到此视图

七爪源码:如何在 Laravel 9 应用程序中创建多重身份验证

用户仪表板:

将以下凭据用于管理仪表板:

Email: user@example.comPassword: 12345678

在这里,您将在使用普通用户登录后看到此视图

七爪源码:如何在 Laravel 9 应用程序中创建多重身份验证

我希望你一步一步喜欢 laravel 多认证教程。 所以,不要忘记与他人分享,祝你有美好的一天。

关注七爪网,获取更多APP/小程序/网站源码资源!

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/176346.html