在成功登录用户后,我正在使用guzzle HTTP客户端发出基于密码授予的访问令牌。我正在使用用于oauth的通行证软件包,并且已经完成了所有设置,包括它创建的Password Grant Client。在我的登录控制器中,我重写了sendLoginResponse
特性的AuthenticatesUsers
方法,以便在成功进行电子邮件/密码身份验证时发出访问令牌
public function sendLoginResponse(Request $request)
{
try {
Log::debug("Auth attempt sucessful, obtaining access_token for user :: ".$request->email);
$client = new Client();
$token_response = $client->post(config('app.url').'/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => config('auth.password_grant.client.id'),
'client_secret' => config('auth.password_grant.client.secret'),
'username' => $request->email,
'password' => $request->password,
'scope' => '*',
],
]);
if($token_response->getStatusCode()!=200) {
Log:error("Login failed to generate Access Token");
throw new InvalidCredentialsException();
}
$request->session()->regenerate();
$this->clearLoginAttempts($request);
$data = json_decode((string) $token_response->getBody(), true);
Cookie::queue('refresh_token',$data->refresh_token,config('auth.tokens.refresh.expire.days')*1440);
Log::debug("Adding Bearer token to Authorization header");
return response()->view('dashboard', [
'expires_in' => $data->expires_in
], 200)->header('Authorization', $data->token_type.' '.$data->access_token);
} catch(Exception $e){
Log::error('Error :: '.$e->getMessage());
throw $e;
}
}
当我发出此发布请求时,整个PHP过程无响应,并且任何日志中都没有错误。恰好在这一行
$token_response = $client->post($token_url, .......
我在Debug会话中运行了它; URL,客户端ID和密码是通过配置属性正确生成的;我唯一看到的异常是FileNoFoundException
,它确实找到了用于节流阀登录的任何缓存键,并且都在进行此调用之前就发生了,并且应用程序继续对用户进行身份验证。
当我通过邮递员或通过artisan
tinker
发出具有相同参数的请求时,我可以得到包含access_token
,refresh_token
和expires_in
数据的响应
答案 0 :(得分:0)
使用“命中与试用”几个小时确实可以为您节省10分钟的“文档”处理时间。
结果证明,我真的不必做所有繁重的工作this link展示了如何在\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
的{{1}}中间件中添加web
到中间件为第一方应用(例如React JS)生成ApiToken,我将使用这些API来消耗自己的API。
虽然已经解决了编写所有代码的意图,但我仍然不确定是什么原因导致进程无响应,从而使php代码中的access_token成为可能。