针对具有相同问题的人员的修复程序进行更新:
我终于获得了令牌授权才能工作。我相信问题可能出在我的UserController.php中,
$this->middleware('auth);
在我的__construct方法中。我没有制作原始的Laravel应用程序,但是我相信这个中间件来自那里,因为需要创建会话cookie的登录名。
现在,我下面发布的代码可以完美运行!
原始帖子
您可能会在我的帖子历史中看到,这个问题困扰了我一阵子,我觉得我已经尝试了所有事情,所以我又来了。问题:
我已经使用laravel-passport设置了我的授权服务器,并连接到API服务器。我从React SPA调用授权服务器(如果需要的话,使用axios),在该服务器上发送用户名(这是电子邮件)和密码,如果被接受,则返回访问令牌。所有这些都有效,现在我想发送一个请求,以使用访问令牌检索数据。这是通过以下代码完成的:
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调用具有正确的同步(数据:“数据”部分只是确保它没有将config参数作为data参数读取)。
我还尝试通过构造的密码授予客户端显式使用密码授予令牌,但这会产生相同的错误。
唯一可疑的是我的两个oauth客户端的user_id为null。我不确定它们如何工作,因此我here对此进行了询问。克里斯·凯尔克(Chris Kelker)给出了我希望得到的答案,但由于无法确定如何直接更改护照中的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);
}
}
在我的应用程序中检索令牌的代码是:
const accessTokenData = await axios.post('http://my-app/api/loginToken', {email: 'myemail@email.com', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;
答案 0 :(得分:0)
例如,您可以注销发送的内容吗?发送之前,您可能没有更新令牌持有者变量。
答案 1 :(得分:0)
针对具有相同问题的人的修复程序进行更新:
我终于获得了令牌授权才能工作。我相信问题可能出在我的UserController.php中,
$ this-> middleware('auth); 在我的__construct方法中。我没有制作原始的Laravel应用程序,但我相信该中间件来自那里,因为需要创建会话cookie的登录名。
现在,我下面发布的代码可以完美运行!