小編給大家分享一下laravel實現(xiàn)多用戶體系登錄的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
烏爾禾網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,烏爾禾網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為烏爾禾上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的烏爾禾做網(wǎng)站的公司定做!
laraveli添加一個或多個用戶表,以admin為例。
部分文件內(nèi)容可能需要根據(jù)實際情況修改
推薦:laravel教程
創(chuàng)建一個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模型
修改auth.php配置文件
'guards' => [ ... 'admin' => [ 'driver' => 'session', 'provider' => 'admins' ] ], 'providers' => [ ... 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ],在app/Http/Controllers下創(chuàng)建目錄Admin/Auth
在Admin目錄下創(chuàng)建文件HomeController.php(這個文件用來測試登錄成功后的跳轉(zhuǎn)頁面)
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目錄下創(chuàng)建文件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()方法里調(diào)用上面增加的方法
public function map() { $this->mapApiRoutes(); $this->mapAdminWebRoutes();//調(diào)用新增的方法 $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復(fù)制到resources/views/admin下
把layouts/app.blade.php復(fù)制為layouts/admin.blade.php,修改相應(yīng)的地方
把login.blade.php復(fù)制到admin/Auth目錄下
@extends('layouts.admin') @section('content')@endsectionAdmin Login
數(shù)據(jù)填充
php artisan make:seed AdminsTableSeeder
編輯AdminsTableSeeder.php
public function run() { \App\Admin::insert([ 'name'=>'yzha5', 'password'=> bcrypt('123456') ]); } DatabaseSeeder.php $this->call(AdminsTableSeeder::class);
文件上傳至服務(wù)器,登入服務(wù)器,執(zhí)行填充命令
php artisan migrate php artisan db:seed
此時,直接打開http://xxx/admin并不會跳轉(zhuǎn)到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時,會自動跳轉(zhuǎn)到/home這個URI,這是因為guest這個中間件默認跳轉(zhuǎn)到了/home,也就是middleware目錄下的RedirectIfAuthenticated.php這個文件。
解決方法為:
創(chuàng)建一個中單件,名為: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:admin Route::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');
以上是“l(fā)aravel實現(xiàn)多用戶體系登錄的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!