如何在 laravel 护照中实现多身份验证
Posted
技术标签:
【中文标题】如何在 laravel 护照中实现多身份验证【英文标题】:how to implement multiauth in laravel passport 【发布时间】:2018-09-01 20:51:57 【问题描述】:我有两个用户 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::attempt 不存在。
您能否分享您对如何在 laravel/passport 中进行多身份验证的想法
【问题讨论】:
我尝试了一种类似的方式来验证两个用户但我失败了,所以我在我的用户表中添加了一个枚举“类型”字段。 所以没有办法在 laravel/passport 中为 api 做多重身份验证? 查看这个 repo github.com/sfelix-martins/passport-multiauth ok 会检查的 【参考方案1】:您可以在 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 驱动程序保护,例如
用户控制器.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');
);
【讨论】:
【参考方案2】:我设法通过中间件做到了,希望这会对你有所帮助 - Laravel Passport Multiple Authentication using Guards
【讨论】:
以上是关于如何在 laravel 护照中实现多身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase 身份验证中实现多用户帐户登录和切换?
身份验证用户提供程序 [passport] 未使用 laravel 护照定义