当前位置: 首页 > 后端技术 > PHP

laravel实现多用户系统登录

时间:2023-03-30 01:14:01 PHP

laraveli添加一张或多张用户表,以admin为例。.部分文件内容可能需要根据实际情况修改创建Admin模型phpartisanmake:modelAdmin-m写入admins表字段Schema::create('admins',function(Blueprint$table){$table->increments('id');$table->string('name')->unique();$table->string('password');$table->rememberToken();$table->timestamps();});编辑管理模型[...'admin'=>['driver'=>'session','provider'=>'admins']],'providers'=>[...'admins'=>['driver'=>'eloquent','model'=>App\Admin::class,]],在app/Http/Controllers下创建目录Admin/Auth,在Admin目录下创建文件HomeController.php(该文件用于测试登录成功后的跳转页面)middleware('auth:admin');}/***显示应用程序仪表板。**@return\Illuminate\Http\Response*/publicfunctionindex(){returnview('admin.home');}}使用命令生成一个Requestphpartisanmake:requestAdminLoginRequest这个时候在app/Http/Request目录下生成了这个文件,然后编辑这个文件'required','password'=>['required','min:6']//密码必填,最小长度为6];}}在Admin/Auth创建文件LoginController.phponly('name','password');$result=Auth::guard('admin')->attempt($data,true);如果($result){返回重定向(路线('admin.home'));}else{returnredirect()->back()->with('name',$loginRequest->get('name'))->withErrors(['name'=>'用户名或密码错误']);}}公共乐趣动作postLogout(){Auth::guard('admin')->logout();返回重定向(路线('admin.login.show'));}}添加路线打开app/providers/RouteServiceProvider.php并在方法mapWebRoutes()方法)->group(base_path('routes/admin.php'));}在map()方法中调用上面添加的方法publicfunctionmap(){$this->mapApiRoutes();$this->mapAdminWebRoutes();//调用新方法$this->mapWebRoutes();}在routes目录下添加一个路由文件admin.phpmiddleware('guest:admin')->name('admin.login.show');Route::get('/','Admin\HomeController@index')->name('admin.home');Route::post('login','Admin\Auth\LoginController@postLogin')->middleware('guest:admin')->name('admin.login.post');Route::post('logout','Admin\Auth\LoginController@postLogout')->middleware('auth:admin')->name('admin.logout');将home.blade.php复制到resources/views/admin下把layouts/app.blade.php复制为layouts/admin.blade.php,修改相关的地方@guest('admin')

  • 管理员登录
  • @else{{Auth::guard('admin')->user()->name}}
  • 注销{{csrf_field()}}
  • @endguest把login.blade.php复制到admin/Auth目录下@extends('layouts.admin')@section('content')管理员登录
    {{csrf_field()}}has('name')?'has-error':''}}">电子邮件地址@if($errors->has('name')){{$errors->first('name')}}@endif
    has('password')?'has-error':''}}">密码@if($errors->has('password')){{$错误->第一('密码')}}@endif
    登录@endsection数据填充phpartisanmake:seedAdminsTableSeedereditAdminsTableSeeder.phppublicfunctionrun(){\App\Admin::insert(['name'=>'yzha5','密码'=>bcrypt('123456')]);}DatabaseSeeder.php$this->call(AdminsTableSeeder::class);上传文件到服务器,登录服务器,执行填充命令phpartisanmigratephpartisandb:Seed此时直接打开http://xxx/admin不会跳转到http://xxx/admin/登录,所以需要处理一些异常,打开app/Exceptions/Handle.php,重写unauthenticated()方法。使用Illuminate\Support\Facades\Route;protectedfunctionunauthenticated($request,AuthenticationException$exception){returnstarts_with(Route::currentRouteName(),'admin')?重定向(路由('admin.login.show')):父级::未验证($request,$exception);}改进上面的代码,当admin登录再次访问URI/admin/login时,会自动跳转到URI/home,因为中间件guest默认跳转到/home,也就是文件RedirectIfAuthenticated。中间件目录下的php。解决方案是:创建一个中间件,命名为:RedirectIfAdminAuthenticatedphpartisanmake:middlewareRedirectIfAdminAuthenticated编辑这个文件:要求。**@param$request*@paramClosure$next*@paramnull$guard*@return\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|mixed*/公共函数handle($request,Closure$next,$guard=null){if(Auth::guard($guard)->check()){returnredirect('/admin');}返回$next($request);}}在内核中添加一行.phpprotected$routeMiddleware=[...'admin.guest'=>\App\Http\Middleware\RedirectIfAdminAuthenticated::class,...];更改管理路由,将guest:admin更改为admin.guest:adminRoute::get('login','Admin\Auth\LoginController@showLoginForm')->middleware('admin.guest:admin')->name('admin.login.show');Route::post('login','Admin\Auth\LoginController@postLogin')->middleware('admin.guest:admin')->name('admin.login.post');