我实际上正在使用Symfony 2的Linkedin API来了解更多,但我遇到了一个概念问题。我们走了。
我正在使用名为/ linkedin / auth的路由来启动身份验证阶段,它实际上正在调用indexAction。
此方法的第一步是执行重定向,激发Linkedin的请求响应。
第二步是收集此请求中的CODE以请求访问令牌(OAuth2协议)。
问题出现在两个步骤之间:使用header()重定向而不使用exit()不会重定向我所以我不会永远不会收集我需要的信息但是如果我调用exit()则第二种方法不会打电话。
我尝试了一个棘手的举动,创建一条路径与Linkedin响应相同的路径来调用我的第二种方法,但它没有用。
我不想在Linkedin响应之后创建一个按钮或类似的东西进入第二步。你有什么想法吗? (使用Symfony2逻辑)
public function indexAction()
{
$this->getAuthorizationCode();
$this->getAccessToken();
return $this->render(foo, array());
}
private function getAuthorizationCode()
{
$params = array('response_type' => 'code',
'client_id' => API_KEY,
'state' => STATE,
'redirect_uri' => REDIRECT_URI,
);
$url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params);
header(Location: $url); // Problem is here
#exit; die(); whatever();
}
private function getAccessToken()
{
$request = $this->getRequest();
var_dump($request->query->get('code'));
$params = array('grant_type' => 'authorization_code',
'client_id' => API_KEY,
'client_secret' => API_SECRET,
'code' => $request->query->get('code'),
'redirect_uri' => REDIRECT_URI,
);
$url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params);
$context = stream_context_create(
array('http' =>
array('method' => 'POST',
)
)
);
$response = file_get_contents($url, false, $context);
$token = json_decode($response);
$_SESSION['access_token'] = $token->access_token;
$_SESSION['expires_in'] = $token->expires_in;
$_SESSION['expires_at'] = time() + $_SESSION['expires_in'];
return true;
}