为什么一条路线失败而另一条路线起作用?

时间:2019-06-13 16:10:37

标签: laravel api

我正在使用Laravel服务我的网站和无状态API。我将Passport与在cookie中设置的令牌一起使用来验证API,这由Passport处理。

我使用axios中的vue.js来调用API

我在返回Unauthorized的API调用中遇到问题,所有其他请求都很好,经过反复试验,我发现了以下发现

    this.$axios.get('session/'+this.session+'/posts')
            .then(response => { console.log(response.data); });
    Route::get('/session/{code}/posts'      , 'PostController@posts');

有效;而

    this.$axios.get('session/posts')
            .then(response => { console.log(response.data); });
    Route::get('/session/posts'     , 'PostController@posts');

没有(返回401未经授权)。

在第一个示例中,$code值只是一个模糊的ID,与身份验证无关,它是一个字符串。另外,session指的是内部Application对象,与php会话完全无关。

这是在我的路线服务提供商中的

        Route::prefix('api')
            ->middleware('auth:api')
            ->namespace($this->namespace.'\API')
            ->group(base_path('routes/api.php'));

这会在cookie中设置令牌(默认为laravel_token),并使用该令牌进行身份验证。

其他路由正在通过此方法成功进行身份验证,当我将变量添加到路由时,它就可以正常工作!

有人可以向我解释为什么第二版给出未经授权的答复吗?

似乎是auth:api卫士可以做到这一点,但是我不知道实际的check()代码在Laravel框架中的位置。

1 个答案:

答案 0 :(得分:0)

请检查您的路由是否激活了auth:guard api前缀的一部分。而您需要发送api生成的令牌以获得授权。