php - Laravel 7 使用 Passport 进行多重身份验证
问题描述
我正在开发需要为多个用户生成访问令牌的 Laravel 应用程序。我正在使用带有密码授予的 Laravel Passport 来颁发令牌。我遵循了 Laravel 文档,但是当我尝试使用 Postman 调用我的 API 端点(学生)时,我被重定向到登录路由,似乎我做错了。后来我发现重定向来自我创建的中间件,但我仍然不知道出了什么问题
授权文件
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
'api-student' => [
'driver' => 'passport',
'provider' => 'students',
'hash' => false,
]
];
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'students' => [
'driver' => 'eloquent',
'model' => App\Student::class,
],
],
api.php
Route::post('auth/getlogin', 'Api\StudentController@authenticate')->middleware('auth:api-student');
//Api\StudentController
public function authenticate(Request $request, Student $user)
{
$credentials = [
'username'=>$request->username,
'password'=>$request->password];
if(!Auth::guard('api-student')->attempt($credentials)) {
return response()->json([
'message'=>'Error'
], 401);
}
if(Auth::guard('api-student')->attempt($credentials)){
$user = Auth::guard('client');
$success['token'] = $user->createToken('MyApp')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
}
else{
return response()->json(['error'=>'Username or password incorrect'], 401);
}
}
解决方案
删除middleware
以便任何人都可以登录
Route::post('auth/getlogin', 'Api\StudentController@authenticate')->middleware('auth:api-student');
至
Route::post('auth/getlogin', 'Api\StudentController@authenticate');
你middleware
在这里申请所以在做任何行动之前它检查路线auth
是否
推荐阅读
- python - 使用 Python 按标签名称分隔 html 文件
- javascript - Javascript:将内容写入新页面但保持相同的位置
- sql - H2 不允许使用集合内的连接执行选择
- python - 睡眠 5 分钟后停止 ec2 实例 - time.sleep() 没有按预期工作?
- python-3.x - Web数据抓取:通过选择下拉菜单python获取所有数据
- azure-active-directory - 如何使用 Azure AD 范围和 oidc-client.js 检索用户信息?
- npm - 如何解决 npm 错误代码:Azure DevOps 中的 254?
- javascript - 如何检查 Referrer URL 是否有 URL 参数?
- javascript - 将大文本加载到文本区域需要在浏览器中花费大量时间并且浏览器崩溃
- openseadragon - openseadragon 作物一个非常宽的图像?