2017-04-24 34 views
1

The error when i login as Admin在多個身份驗證使用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> 
+0

你可以在你的auth.php中添加'providers'數組嗎? – hctopcu

+0

是的,我添加提供商數組 – Haider

+0

請將它添加到您的文章,以便我可以看到。 – hctopcu

回答

0

guards.admin正在尋找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, 
    ], 
], 

而且您的分行模式必須實現照亮\ \合同驗證\可驗證 如果你的分支表具有相同的分貝colums一樣,idpasswordremember_token;最簡單的方法將與用戶模型相同。

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', "[email protected]")->middleware('auth:web'); 

Route::get('/some-page-for-branch-users', "[email protected]")->middleware('auth:admin'); 

然後在你的意見等任何地方,你就可以對用戶身份驗證() - >用戶(),讓您的分公司或用戶無論在中間件設置。