如何在 Laravel 7 中创建多重身份验证?

myS*_*Sun 1 laravel laravel-7

我曾经使用 laravel 5.5 及早于https://github.com/Hesto/multi-auth

但此存储库不会针对 laravel 7.0 进行更新

如何在 Laravel 7.0 中创建多重身份验证?

Seh*_*dev 5

如果你想使用一个包,你可以使用这个包laravel-multiauth

\n

或者

\n

multi-auth如果您想根据用户表中的字段创建自定义for.eg is_admin,请按照以下步骤操作:

\n

假设你已经安装了 Laravel 并连接到数据库

\n

步骤1:is_admin在用户表和模型中添加新行。然后运行迁移。

\n
 public function up()\n        {\n            Schema::create(\'users\', function (Blueprint $table) {\n                $table->bigIncrements(\'id\');\n                $table->string(\'name\');\n                $table->string(\'email\');\n                $table->timestamp(\'email_verified_at\')->nullable();\n                $table->boolean(\'is_admin\')->nullable(); // add this\n                $table->string(\'password\');\n                $table->rememberToken();\n                $table->timestamps();\n\n        });\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

应用程序/用户.php

\n
protected $fillable = [\n    \'name\', \'email\', \'password\', \'is_admin\' //add here\n];\n
Run Code Online (Sandbox Code Playgroud)\n

然后运行迁移

\n
   php artisan migrate\n
Run Code Online (Sandbox Code Playgroud)\n

Step2:Auth使用脚手架 创建

\n

使用以下命令安装laravel/ui

\n
composer require laravel/ui \n
Run Code Online (Sandbox Code Playgroud)\n

生成授权

\n
php artisan ui bootstrap --auth \n\nnpm install\n\nnpm run dev\n
Run Code Online (Sandbox Code Playgroud)\n

步骤3: 创建IsAdmin中间件将只允许admin访问该路由的用户

\n
php artisan make:middleware IsAdmin\n
Run Code Online (Sandbox Code Playgroud)\n
\n

应用程序/Http/middleware/IsAdmin.php

\n
\n

IsAdmin在中间件中添加这个

\n
public function handle($request, Closure $next)\n{\n    if(auth()->user()->is_admin == 1){\n       return $next($request);\n    }\n    return redirect(\xe2\x80\x98home\xe2\x80\x99)->with(\xe2\x80\x98error\xe2\x80\x99,"You don\'t have admin access.");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

将您的IsAdmin中间件注册在app/Http/Kernel.php

\n
protected $routeMiddleware = [\n       \'auth\' => \\App\\Http\\Middleware\\Authenticate::class,\n        \'auth.basic\' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        \'bindings\' => \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        \'cache.headers\' => \\Illuminate\\Http\\Middleware\\SetCacheHeaders::class,\n        \'can\' => \\Illuminate\\Auth\\Middleware\\Authorize::class,\n        \'guest\' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n       \'signed\' => \\Illuminate\\Routing\\Middleware\\ValidateSignature::class,\n       \'throttle\' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n   \'verified\' => \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class,\n    \'is_admin\' => \\App\\Http\\Middleware\\IsAdmin::class, // add this\n\n];\n
Run Code Online (Sandbox Code Playgroud)\n

第四步: 为管理员创建路由routes/web.php

\n
Route::get(\'admin/home\', \'HomeController@adminHome\')->name(\'admin.home\')->middleware(\'is_admin\');\n
Run Code Online (Sandbox Code Playgroud)\n

Step5:添加adminHome()管理路由方法app/Http/Controllers/HomeController.php

\n
public function adminHome()\n {\n      return view(\'adminHome\');\n }\n
Run Code Online (Sandbox Code Playgroud)\n

第6步:更改LoginController,当用户登录时我们根据用户访问进行重定向。如果是普通用户,我们将重定向到主路由,如果是管理员用户,我们将重定向到管理路由app/Http/Controllers/Auth/LoginController.php

\n
public function login(Request $request)\n{   \n    $input = $request->all();\n    $this->validate($request, [\n        \'email\' => \'required|email\',\n        \'password\' => \'required\',\n    ]);\n\n    if(auth()->attempt(array(\'email\' => $input[\'email\'], \'password\' => $input[\'password\'])))\n    {\n        if (auth()->user()->is_admin == 1) {\n            return redirect()->route(\'admin.home\');\n        }else{\n            return redirect()->route(\'home\');\n        }\n    }else{\n        return redirect()->route(\'login\')\n            ->with(\'error\',\'Email-Address And Password Are Wrong.\');\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n