Laravel多表认证
身份验证是任何Web应用程序的重要组成部分,Laravel通过其内置的身份验证功能使其易于实现。但是,如果您有多种用户类型,每种类型在数据库中都有自己的表怎么办?在这种情况下,您需要实施多表身份验证以确保正确的用户通过身份验证并获得对应用程序的正确访问权限。在本文中,我将带您完成在Laravel中实现多表身份验证的步骤,以便您可以保护您的应用程序并为您的用户提供最佳体验。准备好进入Laravel身份验证的世界吧!
我们可以?我们走吧。
我首先假设您知道如何安装一个新的Laravel应用程序并且您已经安装了一个。也就是说,让我们继续。
Laravel带有默认用户表,假设这是您应用程序默认用户的表。并且您想要另一个表供管理员用户使用。phpartisanmake:modelAdminAdmin
现在您已经创建了Admin模型,进入它并复制以下代码。Notifiable特性使得在这些模型上使用laravel默认通知成为可能。useIlluminateFoundationAuthUserasAuthenticatable;useIlluminateNotificationsNotifiable;classAdminextendsAuthenticatable{useHasFactory,Notifiable;protectedguardadmin;}
Laravel有配置文件夹,其中包含所有配置文件。在此文件中,打开auth。php文件并将以下代码粘贴到我们为管理员创建身份验证规则的位置。
在auth。php配置中defaults〔guardweb,passwordsusers,〕,admin〔drivereloquent,modelAppModelsAdminAdmin::class,〕,guards〔web〔driversession,providerusers,〕,api〔drivertoken,providerusers,hashfalse,〕,admin〔driversession,provideradmins,〕,〕,providers〔users〔drivereloquent,modelAppModelsUser::class,〕,admins〔drivereloquent,modelAppModelsAdminAdmin::class,〕,〕,passwords〔users〔providerusers,tablepasswordresets,expire60,throttle60,〕,admins〔drivereloquent,modelAppModelsAdminAdmin::class,〕,〕,
现在导航到middlware文件夹并打开Authentication。php文件。这是在尝试访问受保护页面时重定向未通过身份验证的用户的文件。请注意,我注释掉了文件中的默认代码。
中间件Authenticate。phpforeach(guardsasguard){if(Auth::guard(guard)check()){returnredirect(RouteServiceProvider::HOME);}}foreach(guardsasguard){if(Auth::guard(guard)check()){if(guardadmin){returnredirect()route(admin。home);}returnredirect()route(user。home);returnredirect(RouteServiceProvider::HOME);}}if(!requestexpectsJson()){if(requestrouteIs(admin。)){returnroute(admin。login);}returnroute(login);}
在同一个中间件文件夹中,打开以下文件。它是负责根据身份验证中使用的守卫重定向经过身份验证的用户的中间件。
在RedirectIfAuthenticated。php中foreach(guardsasguard){if(Auth::guard(guard)check()){returnredirect(RouteServiceProvider::HOME);}}foreach(guardsasguard){if(Auth::guard(guard)check()){if(guardadmin){returnredirect()route(admin。home);}returnredirect()route(user。home);returnredirect(RouteServiceProvider::HOME);}}
Adminauthcontroller
我们首先创建一个控制器来处理管理员登录。phpartisanmake:controllerAuthAdminAuthController
控制器内部publicfunctionconstruct(){Auth::setDefaultDriver(admin);config(〔auth。defaults。passwordsadmins〕);}publicfunctionlogin(){returnview(adminauth。adminlogin);}publicfunctionstore(Requestrequest){requestvalidate(〔emailrequiredstring,passwordrequiredmin:5max:30〕);if(Auth::guard(admin)attempt(〔emailrequestidentifier,passwordrequestpassword〕)Auth::guard(admin)attempt(〔usernamerequestidentifier,passwordrequestpassword〕)){Authenticationwassuccessful。。。returnredirect()route(panel);}else{returnredirect()route(admin。login)with(fail,Incorrectcredentials);}}
路由
身份验证Route::get(adminlogin,〔AdminAuthController::class,login〕)name(admin。login);Route::get(adminlogin,〔AdminAuthController::class,store〕)name(admin。login。store);
创建第三条路线以通往管理仪表板。
登录html!doctypehtmlhtmllangenheadmetacharsetutf8metanameviewportcontentwidthdevicewidth,initialscale1titleBootstrapdemotitlelinkhrefhttps:cdn。jsdelivr。netnpmbootstrap5。2。3distcssbootstrap。min。cssrelstylesheetintegritysha384rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65crossoriginanonymousheadbody!h1Hello,world!h1mainclasscontainermt5mainbodyhtml
工厂和播种机phpartisanmake:factoryAdminAdminFactoryphpartisanmake:seederAdminSeeder