laraveli添加一个或多个用户表,以admin为例。
部分文件内容可能需要根据实际情况修改
推荐:laravel教程
创建一个Admin模型
php artisan make:model Admin -m
编写admins表字段
Schema::create('admins', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps();});
编辑admin模型
<?phpnamespace App;use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;/** * @property int $id * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */class Admin extends Authenticatable{ use Notifiable; protected $fillable = [ 'name', 'password','remember_token' ]; protected $hidden = [ 'password','remember_token' ];}
'guards' => [ ... 'admin' => [ 'driver' => 'session', 'provider' => 'admins' ]],'providers' => [ ... 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ]],
在app/Http/Controllers下创建目录Admin/Auth
在Admin目录下创建文件HomeController.php(这个文件用来测试登录成功后的跳转页面)
middleware('auth:admin'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('admin.home'); }}
使用命令生成一个Request
php artisan make:request AdminLoginRequest
此时在app/Http/Request目录下便生成了这个文件,然后编辑这个文件
'required', 'password' => ['required', 'min:6'] //密码必须,最小长度为6 ]; }}
在Admin/Auth目录下创建文件LoginController.php
only('name', 'password'); $result = Auth::guard('admin')->attempt($data, true); if ($result) { return redirect(route('admin.home')); } else { return redirect()->back() ->with('name', $loginRequest->get('name')) ->withErrors(['name' => '用户名或密码错误']); } } public function postLogout() { Auth::guard('admin')->logout(); return redirect(route('admin.login.show')); }}
添加路由。打开app/providers/RouteServiceProvider.php
在方法mapWebRoutes()方法后面增加一个方法
protected function mapAdminWebRoutes() { Route::middleware('web') ->prefix('admin') ->namespace($this->namespace) ->group(base_path('routes/admin.php')); }
在map()方法里调用上面增加的方法
public function map() { $this->mapApiRoutes(); $this->mapAdminWebRoutes();//调用新增的方法 $this->mapWebRoutes(); }
在routes目录下增加一个路由文件admin.php
middleware('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,修改相应的地方
把login.blade.php复制到admin/Auth目录下
@extends('layouts.admin')@section('content') Admin Login {{ csrf_field() }} has('name') ? ' has-error' : '' }}"> @if ($errors->has('name')) {{ $errors->first('name') }} @endif has('password') ? ' has-error' : '' }}"> @if ($errors->has('password')) {{ $errors->first('password') }} @endif @endsection
数据填充
php artisan make:seed AdminsTableSeeder
编辑AdminsTableSeeder.php
public function run() { \App\Admin::insert([ 'name'=>'yzha5', 'password'=> bcrypt('123456') ]); }DatabaseSeeder.php$this->call(AdminsTableSeeder::class);
文件上传至服务器,登入服务器,执行填充命令
php artisan migratephp artisan db:seed
此时,直接打开http://xxx/admin并不会跳转到http://xxx/admin/login,因此需要处理一些异常。打开app/Exceptions/Handle.php
重写unauthenticated()方法。
use Illuminate\Support\Facades\Route;protected function unauthenticated($request, AuthenticationException $exception) { return starts_with(Route::currentRouteName(), 'admin') ? redirect(route('admin.login.show')) : parent::unauthenticated($request, $exception); }
完善一下
以上代码,当admin登录后,再次访问/admin/login这个URI时,会自动跳转到/home这个URI,这是因为guest这个中间件默认跳转到了/home,也就是middleware目录下的RedirectIfAuthenticated.php这个文件。
解决方法为:
创建一个中单件,名为:RedirectIfAdminAuthenticated
php artisan make:middleware RedirectIfAdminAuthenticated
编辑这个文件:
check()) { return redirect('/admin'); } return $next($request); }}在Kernel.php中添加一行protected $routeMiddleware = [ ... 'admin.guest' => \App\Http\Middleware\RedirectIfAdminAuthenticated::class, ... ];更改admin路由,将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');
以上就是laravel如何实现多用户体系登录的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/92713.html
微信扫一扫
支付宝扫一扫




