Laravel Passport中间件保护的路由“未经身份验证”问题

13 laravel vue.js laravel-5 vuejs2 laravel-passport

我使用Laravel Passport进行身份验证,因此我将路由放入中间件保护中。

更新

为了清楚起见,我也添加了UsersController。

public function getUser()
{
    $users = Auth::user();
    return response()->json($users);
}
Run Code Online (Sandbox Code Playgroud)

//

public function getUser()
{
    $users = Auth::user();
    return response()->json($users);
}
Run Code Online (Sandbox Code Playgroud)

当然,我需要登录,否则看不到受保护的路由。我在AuthController控制器内部做了一个and内部的登录功能。

控制者

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
    /* users */
    Route::get('/users', 'Api\UsersController@getUser');

    /* fetch */
    Route::get('/articles', 'Api\ArticlesController@allArticles');
    Route::get('/article/{id}', 'Api\ArticlesController@singleArticle');
});
Run Code Online (Sandbox Code Playgroud)

在vuex的前端,我有一个动作呼叫。

retrieveToken(context, credentials){
    return new Promise((resolve, reject) => {
            axios.post("api/v1/login", {
                email: credentials.username,
                password: credentials.password,
            })
            .then(response => {
                const token = response.data.access_token;
                localStorage.setItem("access_token", token);
                context.commit("retrieveToken", token);
                resolve(resolve);
            })
            .catch(error => {
                console.log(error);
                reject(response);
            })
    })
},
Run Code Online (Sandbox Code Playgroud)

一切顺利。我存储令牌并将其用于登录,然后将其删除以注销。但是在后端,缺少了一些东西。因为即使登录,我仍然看不到受保护的路由。Laravel的Auth不知道该用户已登录。

我应该在哪里将令牌放入标头?在控制器内部还是登录方法?还是我需要做其他事情?

Clo*_* Fu 3

登录用户也可以看到只有身份验证用户才能看到的页面。

你怎么做这个?如果用户可以看到身份验证用户可以看到的内容,这意味着您正在GET使用身份验证令牌发出请求,对吗?如果您使用护照,则应将令牌放入授权标头中。

axios.defaults.headers.common.Authorization = `Bearer ${token}`;
Run Code Online (Sandbox Code Playgroud)

登录后,使用此命令将令牌放入所有 axios 请求中,然后就可以开始了。