gpt4 book ai didi

Laravel Passport 中间件保护路由 "Unauthenticated"问题

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:00 27 4
gpt4 key购买 nike

我使用 Laravel Passport 进行身份验证,所以我将我的路由置于中间件保护中。

已更新

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

public function getUser()
{
$users = Auth::user();
return response()->json($users);
}

//

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

当然需要登录,不然看不到被保护的路由。我制作了一个 AuthController 并在其中添加了一个 Controller 登录功能。

Controller

public function login(Request $request)
{
$http = new \GuzzleHttp\Client;
try {
$response = $http->post(config('services.passport.login_endpoint'), [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('services.passport.client_id'),
'client_secret' => config('services.passport.client_secret'),
'username' => $request->email,
'password' => $request->password,
]
]);
return $response->getBody();
} catch (\GuzzleHttp\Exception\BadResponseException $e) {
if ($e->getCode() === 400) {
return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
}

if ($e->getCode() === 401) {
return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
}

return response()->json('Something went wrong on the server.', $e->getCode());
}
}

在我的 vuex 的前端,我有一个 Action 调用。

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

一切都很好。我存储 token 并将其用于登录并删除它以用于注销。但是在后端,缺少一些东西。因为即使登录了,还是看不到 protected 路由。 Laravel 的 Auth 不知道用户登录。

我应该把 token 放在标题的什么地方?在 Controller 或登录方法内部?还是我需要做其他事情?

最佳答案

Also logged in user seeing pages only auth user can see.

你是怎么做到的?如果用户可以看到授权用户可以看到的内容,这意味着您正在使用授权 token 发出 GET 请求,对吗?如果您使用的是护照,则应将 token 放入授权 header 中。

axios.defaults.headers.common.Authorization = `Bearer ${token}`;

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

关于Laravel Passport 中间件保护路由 "Unauthenticated"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com