【问题标题】:Laravel 7 Multiple Authentication using PassportLaravel 7 使用 Passport 进行多重身份验证
【发布时间】:2020-12-30 14:18:58
【问题描述】:

我正在开发需要为多个用户生成访问令牌的 Laravel 应用程序。我正在使用带有密码授予的 Laravel Passport 来颁发令牌。我遵循了 Laravel 文档,但是当我尝试使用 Postman 调用我的 API 端点(学生)时,我被重定向到登录路由,似乎我做错了。后来我发现重定向来自我创建的中间件,但我仍然不知道出了什么问题

auth.php

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

【问题讨论】:

  • 欢迎来到 SO .. 你遇到什么错误 .?
  • 我被重定向到我的登录路径,而不是获得访问令牌
  • 添加 header "Accept":"application/json" 然后它不会重定向
  • 谢谢。它不再重定向。但是我在调​​用端点后收到 {"message":"Unauthenticated."}
  • 从这里删除中间件 auth/getlogin 它应该是公共 api 以便任何人都可以登录

标签: php laravel oauth-2.0 laravel-passport


【解决方案1】:

删除middleware,以便任何人都可以登录

Route::post('auth/getlogin', 'Api\StudentController@authenticate')->middleware('auth:api-student');
    

Route::post('auth/getlogin', 'Api\StudentController@authenticate'); 

你在这里申请了middleware,所以在执行任何操作之前它会检查路由是否auth

【讨论】:

  • 谢谢。但现在我收到“消息”:“方法 Illuminate\\Auth\\RequestGuard::attempt 不存在。”。这是否意味着我没有正确调用 Auth?
  • 尝试方法是SessionGuard 的一部分,你不能使用Passport 只是生成令牌并发送。
猜你喜欢
  • 2017-07-08
  • 2019-01-31
  • 2019-03-21
  • 2019-12-20
  • 2021-02-08
  • 2018-05-07
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多