簡體   English   中英

使用laravel 5.3的兩個表的多個auth中的錯誤

[英]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正在尋找一個名為branchprovider你需要在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,如idpasswordremember_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM