Как реализовать мультиавтор в паспорте Laravel
У меня есть два пользователя admin/user, я хочу аутентифицировать этих двух пользователей для API, он работает для одного пользователя, но не работает для администратора
посмотри, что я пробовал в административном контроллере
public function login(Request $request){
// $res=;
// dd ($res);
if(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password]))
{
// if successful, then redirect to their intended location
$user = auth()->guard('admin')->user();
$success['token'] = $user->createToken('admin')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
}
else{
return response()->json(['error'=>'Unauthorised','email'=> $request->email,'password'=> $request->password], 401);
}
}
и в api.php
Route::prefix('admin')->group(function () {
Route::post('login', 'API\Admin\AdminController@login')->name('admin.login');
Route::post('register', 'API\Admin\AdminController@register')->name('admin.register');
Route::group(['middleware' => 'auth:admin-api'], function(){
Route::post('get-details', 'API\Admin\AdminController@getDetails');
});
});
Когда я пытаюсь вызвать функцию попытки для администратора, это дает мне ошибку
Метод BadMethodCallException Illuminate\Auth\RequestGuard:: попытки не существует.
Можете ли вы поделиться своими идеями о том, как сделать multiauth в laravel/passport
1 ответ
Вы можете реализовать multiauth в паспорте Laravel, вы должны выполнить следующие шаги
1) создать 4 охранника в моей ситуации, которую я создал как
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
'admin-api' => [
'driver' => 'passport',
'provider' => 'admin',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
затем при регистрации такого типа пользователя в контроллере убедитесь, что вы используете охрану драйвера sessio, такую как
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);
}
}
в 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);
}
}
а при проверке токена используйте паспорт водителя охранника типа
public function getDetails()
{
$user = Auth::guard('admin-api')->user();
return response()->json(['success' => $user], $this->successStatus);
}
и в промежуточном программном обеспечении
Route::group(['middleware' => 'auth:api'], function(){
Route::post('admin/get-details', 'API\Admin\AdminController@getDetails');
});
Мне удалось сделать это через промежуточное ПО, надеюсь, это вам поможет - Множественная аутентификация Laravel Passport с использованием гвардейцев