public function getUser(Request $request)
{
$data = $request->session()->read(Configure::read('Users.Key.Session.social'));
$requestDataEmail = $request->data('email');
if (!empty($data) && (!empty($data['email']) || !empty($requestDataEmail))) {
if (!empty($requestDataEmail)) {
$data['email'] = $requestDataEmail;
}
$user = $data;
$request->session()->delete(Configure::read('Users.Key.Session.social'));
} else {
if (empty($data) && !($rawData = $this->_authenticate($request))) {
return false;
}
if (empty($rawData)) {
$rawData = $data;
}
$provider = $this->_getProviderName($request);
try {
$user = $this->_mapUser($provider, $rawData);
} catch (MissingProviderException $ex) {
$request->session()->delete(Configure::read('Users.Key.Session.social'));
throw $ex;
}
if ($user['provider'] === SocialAccountsTable::PROVIDER_TWITTER) {
$request->session()->write(Configure::read('Users.Key.Session.social'), $user);
}
}
if (!$user || !$this->config('userModel')) {
return false;
}
if (!($result = $this->_touch($user))) {
return false;
}
if ($request->session()->check(Configure::read('Users.Key.Session.social'))) {
$request->session()->delete(Configure::read('Users.Key.Session.social'));
}
return $result;
}