[英]An error in multiple auth for two tables using laravel 5.3
我有兩個表,一個是普通用戶,另一個是分支。 當我以普通用戶身份登錄時,其登錄沒有任何錯誤。 其次,我想使用分支電子郵件和密碼登錄管理員,並將其保存在分支表中,但是當我登錄時顯示錯誤。
BranchController:
public function ggetlogin()
{
return view('branch_admin.badmin');
}
public function authenticateBranchAdmin(Request $request){
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required'
]);
if($validator->passes()){
if(Auth::guard('admin')->attempt([
'email' => $request->email,
'password' => $request->password,
])){
if(Auth::guard('admin')->branch()->email === $request->email){
return redirect('/branch/'.Branch::branch()->id);
}
}else{
if($this->AdminIsVerified($request->email)){
$request->session()->flash('message', 'Invalid email or password');
}
return redirect('/Admin/login');
}
}else{
return redirect('/Admin/login')->withErrors($validator)->withInput();
}
}
AddBranchView:
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
<form class="form-horizontal branch-form" action="/add/branch" method="post">
<div class="form-group">
<label class="col-sm-3 control-label">BranchName</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="name" placeholder="Name">
@if($errors->has('name'))
{{$errors->first('name')}}
@endif
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">B_Email</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="email" placeholder="Email">
@if($errors->has('email'))
{{$errors->first('email')}}
@endif
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Password</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="password" placeholder="password">
@if($errors->has('password'))
{{$errors->first('password')}}
@endif
</div>
</div>
@if(Session::has('message'))
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="alert alert-info" role="alert">{{Session::get('message')}}</div>
</div>
</div>
@endif
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<button type="submit" value="add branch" class="btn btn-default">Submit</button>
</div>
</div>
{{csrf_field()}}
</form>
</div>
Auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin'=> [
'driver' => 'session',
'provider' => 'branch',
],
],
供應商:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'admin' => [
'driver' => 'eloquent',
'model' => App\Branch::class,
],
],
LoginView:
<form class="form-horizontal login-form" action="/Admin/login" method="post">
<div class="form-group" >
<label class="col-sm-3 control-label">EMAIL</label>
<div class="col-sm-9">
<input type="email" class="form-control" name="email" placeholder="Email">
@if($errors->has('email'))
{{$errors->first('email')}}
@endif
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">PASSWORD</label>
<div class="col-sm-9">
<input type="password" class="form-control" name="password" placeholder="Password">
@if($errors->has('password'))
{{$errors->first('password')}}
@endif
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<button type="submit" value="login" class="btn btn-default">Login</button>
</div>
</div>
{{csrf_field()}}
</form>
guards.admin
正在尋找一個名為branch的provider
你需要在provider數組中有一個branch
。
所以你的auth.php
應該是這樣的:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin'=> [
'driver' => 'session',
'provider' => 'branch', // This one says there should be a branch in providers
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'branch' => [ // This is where guards.admin is looking
'driver' => 'eloquent',
'model' => App\Branch::class,
],
],
您的Branch模型還必須實現Illuminate \\ Contracts \\ Auth \\ Authenticatable如果您的Branch表具有相同的db colums,如id
, password
和remember_token
; 最簡單的方法與User模型相同。
namespace App;
//...
use Illuminate\Foundation\Auth\User as Authenticatable;
//...
class Branch extends Authenticatable
{
//...
}
然后你可以檢索你的分支:
Auth::guard('admin')->user()->email
請注意,您需要使用user()
來獲取分支對象。 不是 。 branch()
我建議您在控制器方法中使用中間件而不是代碼。 它更易於管理,更容易。
routes/web.php
Route::get('/some-page-for-normal-users', "AController@index")->middleware('auth:web');
Route::get('/some-page-for-branch-users', "BController@index")->middleware('auth:admin');
然后在您的視圖中的任何位置等。您將能夠使用auth() - > user()來獲取您的中間件中設置的分支或用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.