我想在管理頁面的laravel 5.4中創建第二個身份驗證。laravel 5.4,添加第二個身份驗證(管理面板)
,首先讓我介紹我的問題: 我必須通過Web網頁6後衛一個有功能的用戶登錄(默認laravel AUTH)。現在我想爲管理面板創建第二個身份驗證。我有另一個存儲名稱的表,一個令牌(類似於密碼)和一個權限級別。
第二個/獨立表是由系統給出的頁面開發的依賴關係,所以我不能改變它。
我有管理面板的登錄頁面,但是當我嘗試進行身份驗證時,我每次都重定向回登錄。
我已經一派整個事情,遇到了一些很好的例子來:
https://jamesmcfadden.co.uk/custom-authentication-in-laravel-with-guards-and-user-service-providers
- 等各個環節都在引擎收錄控制器膏(以下鏈接下)
但我無法弄清楚。
這裏就是我所做的已經:
增加了第二個後衛命名爲 '管理' 在配置/ auth.php
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ] ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ],
添加了所需的模式
namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class Admin extends Authenticatable { use Notifiable; protected $fillable = [ 'mID', 'mAccount', 'mName', 'mServerIP', 'mAuthority', 'mToken' ]; protected $hidden = [ 'mContactIP', 'mToken' ]; protected $table = 'administration'; protected $connection = 'common'; public $timestamps = false; public function getAuthIdentifierName() { return 'mAccount'; } }
添加必要路線在路線/ web.php
Route::group(['prefix' => 'admin'], function() { Route::get('/login','Auth\[email protected]')->middleware('web'); Route::post('/login','Auth\[email protected]'); Route::get('/logout','Auth\[email protected]'); Route::get('/', function(){return redirect('admin/dashboard');}); Route::get('/dashboard', '[email protected]'); });
增添了新的中間件下應用程序/ HTTP /中間件命名爲「RedirectIfElevated'通過命令'PHP人員化妝:中間件'
public function handle($request, Closure $next, $guard = 'admin') { if (!Auth::guard($guard)->check()) { if(!Auth::guard('web')->check()) { return redirect('/'); } return redirect('/admin/login'); } return $next($request); }
和內核。PHP
protected $routeMiddleware = [ . . . 'admin' => \WarShape\Http\Middleware\RedirectIfElevated::class, ];
最後我創造了我控制器:https://pastebin.com/s6iJgFAB
,並建立了視圖
@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">Elevation</div> <div class="panel-body"> <form class="form-horizontal" role="form" method="POST" action="{{ url('/admin/login') }}"> {{ csrf_field() }} <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}"> <label for="mToken" class="col-md-4 control-label">Token</label> <div class="col-md-6"> <input id="mToken" type="password" class="form-control" name="mToken" required> @if ($errors->has('password')) <span class="help-block"> <strong>{{ $errors->first('password') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}"> <label for="recaptcha" class="col-md-4 control-label">Solve Captcha <br> & Elevate!</label> <div class="col-md-6"> {!! app('captcha')->display($attributes = [], $lang = app()->getLocale()) !!} @if ($errors->has('g-recaptcha-response')) <span class="help-block"> <strong>{{ $errors->first('g-recaptcha-response') }}</strong> </span> @endif </div> </div> <input type="hidden" name="mAccount" value="{{ Auth::guard('web')->user()->login }}"> <div class="form-group"> <div class="col-md-8 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Elevate </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection
所以我需要一個答案的問題是:
- 如果我錯過了什麼?我在哪裏搞砸了?
我希望你能幫助我解決這個&感謝您的幫助!
這是最常見的方式,當談到這一點。我在網上多次看到它。但是我必須使用第二個表,因爲它存儲了我無法更改的另一個應用程序的必要數據。我也想過編寫自己的登錄類,但即使如此,我也不知道如何將數據庫中的數據傳遞給auth guard/session。對此有何建議? – PolluX