【问题标题】:Passport authentication is not working in laravel 5.3护照身份验证在 laravel 5.3 中不起作用
【发布时间】:2017-03-06 05:41:46
【问题描述】:

我已经按照此处的文档使用护照设置了 Laravel:

https://laravel.com/docs/5.3/passport.

我在 API 路由中编写了一条路由并使用邮递员发送请求 http://localhost/laravel_project/public/api/user,但它显示以下错误:

RouteCollection.php 第 161 行中的 NotFoundHttpException:

我有以下路线(在 routes/api.php 中):

Route::get('/user', function (Request $request) {
    return array(
      1 => "John",
      2 => "Mary",
      3 => "Steven"
    );
})->middleware('auth:api');

但是当我删除路线中的->middleware('auth:api') 行时,它对我来说工作正常。

我该如何解决这个问题?

另外请告诉我,如果我不想在某些路线中添加护照身份验证,我该怎么做?

【问题讨论】:

    标签: php laravel laravel-routing laravel-5.3 laravel-passport


    【解决方案1】:

    在您的routes/api.php 中,您可以这样做:

    Route::group(['middleware' => 'auth:api'], function(){
    
        Route::get('/user', function (Request $request) {
            return array(
                1 => "John",
                2 => "Mary",
                3 => "Steven"
            );
        });
    
    });
    

    您在此组中定义的所有路由都将具有auth:api 中间件,因此需要通过护照身份验证才能访问它。

    您可以将不需要身份验证的 api 路由放在该组之外。

    编辑:为了确保路由确实存在所需的中间件,请运行php artisan route:list

    【讨论】:

    • 我仍然收到错误:RouteCollection.php 第 161 行中的 NotFoundHttpException:
    • @okconfused 当你运行php artisan route:list 时会发生什么?路由以 api 和 auth:api 作为中间件出现在列表中?我在这条路线的项目中使用 Laravel 5.3 和护照,它对我有用。
    • 当我运行这个命令 php artisan route:list 时,它显示了 Method: GET|HEAD, URI: api/user, Atcion: Closure and Middleware: api,auth:api 我想打通过此 url localhost/project/public/api/user 与 Header 在邮递员中的 API。 Content-Type: application/json 另外我在上面的问题中提到的 routes/api.php 中只有一个路由可能是这个问题。你能告诉我你是如何发送带有令牌的 API 请求的吗?
    • @okconfused 也许问题出在邮递员而不是您的路线上?正如工匠所说,您的路线存在,因此您的路线定义似乎没有问题,也许是您尝试访问它的方式。
    • 在邮递员中,当我删除它时它对我有用 ->middleware('auth:api')
    【解决方案2】:

    我遇到了同样的问题,您似乎必须将 Accept 标头指定为 application/json,如 Matt Stauffer here 所示

    一些进一步的说明:

    1. 您的默认 Accept 标头设置为 text/html,因此 Laravel 会尝试将您重定向到 url /login 但可能您还没有完成 PHP artisan make:auth 所以它不会找到登录路径。
    2. 当您删除中间件时,它会起作用,因为您不再验证您的请求
    3. 要对某些路由进行身份验证,只需使用 Route::groupauth:api 作为中间件对它们进行分组

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2013-06-25
      • 2016-10-29
      • 2018-10-03
      • 2019-06-14
      • 2013-12-28
      相关资源
      最近更新 更多