成功生成令牌,但使用时仍然未授权
Successfully generating a token, but still getting unauthorized when using it
为遇到同样问题的人更新修复:
我终于获得了可以工作的令牌授权。我相信问题可能出在我的 UserController.php 中,我把
$this->middleware('auth);
在我的 __construct 方法中。我没有制作原始的 Laravel 应用程序,但我相信这个中间件来自那里,因为需要登录创建会话 cookie。
现在我的代码 posted 可以完美运行了!
原版post
正如您在我的 post 历史记录中看到的那样,这个问题困扰了我一段时间,我觉得我现在已经尝试了所有方法,所以我又来了。问题:
我已经使用 laravel-passport 设置了我的授权服务器,连接到 API 服务器。从 React SPA,我调用授权服务器(使用 axios,如果重要的话),我在其中发送一个用户名(这是一个电子邮件)和一个密码,如果被接受,returns 一个访问令牌.这一切都有效,现在我想发送请求以使用我的访问令牌检索数据。这是通过以下代码完成的:
var config = {
headers: { 'Authorization': "Bearer " + accessToken }
};
await axios.get('http://apiServer/api/details', {data: 'data'}, config)
.then(response => {
console.log('user: ', response)
})
调用路由
Route::middleware('auth:api')->group(function () {
Route::get('/user', 'ApiController@getUser');
});
调用函数
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], 200);
}
这不起作用,我收到了未经授权的 (401) 消息。 API 标记看起来是正确的,而且我很确定 axios 调用具有正确的语法(数据:'data' 部分只是确保它不会将配置参数读取为数据参数)。
我也尝试过使用构造的密码授予客户端显式使用密码授予令牌,但这会产生相同的错误。
唯一可疑的是我的两个 oauth 客户端都 user_id 为空。我不是 100% 确定它们是如何工作的,所以我询问了它 here。 Chris Kelker 给出了我所希望的答案,但我无法实现它,因为我不确定如何直接更改 passport 中的 oauth 文件,或者我是否应该这样做。
如果需要,我可以提供更多代码,我希望我不会在这个问题上发太多垃圾邮件。
提前致谢,理查德。
根据要求,这是生成令牌的代码:
public function loginToken()
{
if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')->accessToken;
return response()->json(['success' => $success], 200);
} else {
return response()->json(['error' => 'Unauthorised'], 401);
}
}
在我的 React 应用程序中检索令牌的代码是:
const accessTokenData = await axios.post('http://my-app/api/loginToken', {email: 'myemail@email.com', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;
例如,您可以注销您发送的内容吗?您可能没有在发送前更新您的代币持有者变量。
为有同样问题的人更新修复:
我终于获得了可以使用的令牌授权。我相信问题可能出在我的 UserController.php 中,我把
$this->middleware('auth);
在我的 __construct 方法中。我没有制作原始的 Laravel 应用程序,但我相信这个中间件来自那里,因为需要登录创建会话 cookie。
现在我在下面发布的代码可以完美运行了!
为遇到同样问题的人更新修复:
我终于获得了可以工作的令牌授权。我相信问题可能出在我的 UserController.php 中,我把
$this->middleware('auth);
在我的 __construct 方法中。我没有制作原始的 Laravel 应用程序,但我相信这个中间件来自那里,因为需要登录创建会话 cookie。
现在我的代码 posted 可以完美运行了!
原版post
正如您在我的 post 历史记录中看到的那样,这个问题困扰了我一段时间,我觉得我现在已经尝试了所有方法,所以我又来了。问题:
我已经使用 laravel-passport 设置了我的授权服务器,连接到 API 服务器。从 React SPA,我调用授权服务器(使用 axios,如果重要的话),我在其中发送一个用户名(这是一个电子邮件)和一个密码,如果被接受,returns 一个访问令牌.这一切都有效,现在我想发送请求以使用我的访问令牌检索数据。这是通过以下代码完成的:
var config = {
headers: { 'Authorization': "Bearer " + accessToken }
};
await axios.get('http://apiServer/api/details', {data: 'data'}, config)
.then(response => {
console.log('user: ', response)
})
调用路由
Route::middleware('auth:api')->group(function () {
Route::get('/user', 'ApiController@getUser');
});
调用函数
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], 200);
}
这不起作用,我收到了未经授权的 (401) 消息。 API 标记看起来是正确的,而且我很确定 axios 调用具有正确的语法(数据:'data' 部分只是确保它不会将配置参数读取为数据参数)。
我也尝试过使用构造的密码授予客户端显式使用密码授予令牌,但这会产生相同的错误。
唯一可疑的是我的两个 oauth 客户端都 user_id 为空。我不是 100% 确定它们是如何工作的,所以我询问了它 here。 Chris Kelker 给出了我所希望的答案,但我无法实现它,因为我不确定如何直接更改 passport 中的 oauth 文件,或者我是否应该这样做。
如果需要,我可以提供更多代码,我希望我不会在这个问题上发太多垃圾邮件。
提前致谢,理查德。
根据要求,这是生成令牌的代码:
public function loginToken()
{
if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')->accessToken;
return response()->json(['success' => $success], 200);
} else {
return response()->json(['error' => 'Unauthorised'], 401);
}
}
在我的 React 应用程序中检索令牌的代码是:
const accessTokenData = await axios.post('http://my-app/api/loginToken', {email: 'myemail@email.com', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;
例如,您可以注销您发送的内容吗?您可能没有在发送前更新您的代币持有者变量。
为有同样问题的人更新修复:
我终于获得了可以使用的令牌授权。我相信问题可能出在我的 UserController.php 中,我把
$this->middleware('auth); 在我的 __construct 方法中。我没有制作原始的 Laravel 应用程序,但我相信这个中间件来自那里,因为需要登录创建会话 cookie。
现在我在下面发布的代码可以完美运行了!