public function twitterLogin()
{
$this->autoRender = false;
$server = new Twitter(['identifier' => Configure::read('OAuth.providers.twitter.options.clientId'), 'secret' => Configure::read('OAuth.providers.twitter.options.clientSecret'), 'callbackUri' => Configure::read('OAuth.providers.twitter.options.redirectUri')]);
$oauthToken = $this->request->query('oauth_token');
$oauthVerifier = $this->request->query('oauth_verifier');
if (!empty($oauthToken) && !empty($oauthVerifier)) {
$temporaryCredentials = $this->request->session()->read('temporary_credentials');
$tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $oauthToken, $oauthVerifier);
$user = (array) $server->getUserDetails($tokenCredentials);
$user['token'] = ['accessToken' => $tokenCredentials->getIdentifier(), 'tokenSecret' => $tokenCredentials->getSecret()];
$this->request->session()->write(Configure::read('Users.Key.Session.social'), $user);
try {
$user = $this->Auth->identify();
$this->_afterIdentifyUser($user, true);
} catch (UserNotActiveException $ex) {
$exception = $ex;
} catch (AccountNotActiveException $ex) {
$exception = $ex;
} catch (MissingEmailException $ex) {
$exception = $ex;
}
if (!empty($exception)) {
return $this->failedSocialLogin($exception, $this->request->session()->read(Configure::read('Users.Key.Session.social')), true);
}
} else {
$temporaryCredentials = $server->getTemporaryCredentials();
$this->request->session()->write('temporary_credentials', $temporaryCredentials);
$url = $server->getAuthorizationUrl($temporaryCredentials);
return $this->redirect($url);
}
}