how to implement multiauth in laravel passport

后端 未结 2 1436
既然无缘
既然无缘 2021-01-19 01:48

I have two users admin/user i want to authenticate this two users for api, it is working for one user but its not working for admin

see what i have tried in admin c

2条回答
  •  粉色の甜心
    2021-01-19 02:19

    you can implement multiauth in laravel passport you have to follow below steps

    1) create 4 guards in my situation i created like

     'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
         ],
         'admin-api' => [
            'driver' => 'passport',
            'provider' => 'admin',
        ],
         'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
    

    then when logging that type of user in controller make sure you are using sessio driver guards like

    usercontroller.php

     public function login(){
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
            $user = Auth::user();
            $success['token'] =  $user->createToken('MyApp')->accessToken;
            return response()->json(['success' => $success], $this->successStatus);
        }
        else{
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }
    

    in admincontroller.php

     public function login(){
        if(Auth::guard('admin')->attempt(['email' => request('email'), 'password' => request('password')])){
            $user = Auth::guard('admin')->user();
            $success['token'] =  $user->createToken('admin')->accessToken;
            return response()->json(['success' => $success], $this->successStatus);
        }
        else{
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }
    

    and when checking the token use the passport driver guard like

    public function getDetails()
    {
        $user = Auth::guard('admin-api')->user();
        return response()->json(['success' => $user], $this->successStatus);
    }
    

    and in middleware

    Route::group(['middleware' => 'auth:api'], function(){
     Route::post('admin/get-details', 'API\Admin\AdminController@getDetails');
    });
    

提交回复
热议问题