php - 如何在 Laravel 护照中实现多重身份验证

标签 php laravel laravel-5 laravel-4 jwt

我有两个用户 admin/user 我想验证这两个用户的 api, 它适用于一个用户,但不适用于管理员

看看我做了什么 在管理 Controller 中

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 Method Illuminate\Auth\RequestGuard::attempt does not exist.

能否请您分享一下关于如何在 laravel/passport 中进行多重身份验证的想法

最佳答案

你可以在 laravel passport 中实现多重验证,你必须按照以下步骤操作

1) 在我创建的情况下创建 4 个守卫

 'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

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

然后在 Controller 中记录该类型的用户时,请确保您使用的是 sessio 驱动程序保护程序,例如

用户 Controller .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);
    }
}

并且在检查 token 时使用像护照司机一样的 guard

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');
});

关于php - 如何在 Laravel 护照中实现多重身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445237/

相关文章:

php - 将 Redis Cluster 用作 session 处理程序时是否可以实现高可用性?

php - 如何将自定义字段添加到 IPB 中的表单

php - 如何使用 php、jquery 和 ajax 在数据库中插入值

rest - Laravel 5.3 REST中的JSON验证错误消息

laravel - 如何在 Laravel 5.2 中使用 OR 条件将多个参数传递给中间件

laravel - diffForHumans 不起作用返回我分隔符不能 Carbon

目录表中的 PHP HTML 图像

php - Eloquent 地如何搜索关系的值(value)

php - 如果不知道如何获取数组键

php - 有没有办法检查 Laravel 计划是否正在运行?