public function authenticate() { if (!isset($_SESSION['affiliate_login'])) { $user = User::model()->findByAttributes(array('email' => $this->username)); } else { $user = User::findAffiliateUser($_SESSION['affiliate_login']['provider'], $_SESSION['affiliate_login']['uid']); } if ($user === null) { $this->errorCode = self::ERROR_USERNAME_INVALID; } else { #exist this user if (!isset($_SESSION['affiliate_login'])) { #normal login! if (md5($this->password) !== $user->password) { $this->errorCode = self::ERROR_PASSWORD_INVALID; } else { if (!$user->is_activated) { $this->errorCode = self::ERROR_USER_NOT_ACTIVATED; } else { $this->_id = $user->id; $this->errorCode = self::ERROR_NONE; $this->setState("_id", $user->id); $this->setState('roles', $user->role); } } } else { #has session affiliate login $this->_id = $user->id; $this->errorCode = self::ERROR_NONE; $this->setState("_id", $user->id); $this->setState('roles', $user->role); } } return !$this->errorCode; }
public function processAffiliateUser($auth) { $provider = $auth['provider']; $uid = $auth['uid']; $info = $auth['info']; $email = $provider . ":" . $uid; $username = $provider . ":" . $uid; if (isset($info['first_name']) and isset($info['last_name'])) { $first_name = $info['first_name']; $last_name = $info['last_name']; } else { if (isset($info['name'])) { $name = explode(" ", $info['name']); $last_name = array_pop($name); $first_name = implode(" ", $name); } else { $first_name = $provider . ":" . $uid; $last_name = " "; } } #check if exist user $user = User::findAffiliateUser($provider, $uid); if (!$user) { $user = new User(); $user->email = $email; $user->username = $username; $user->first_name = $first_name; $user->last_name = $last_name; $user->role = 'user'; $user->affiliation = $provider; if ($provider == "Facebook") { $user->facebook_id = $uid; } else { if ($provider == "Twitter") { $user->twitter_id = $uid; } else { if ($provider == "LinkedIn") { $user->linkedin_id = $uid; } else { if ($provider == "Google") { $user->google_id = $uid; } else { if ($provider == "Orcid") { $user->orcid_id = $uid; } } } } } #generate some credential data $user->password = self::generatePassword(32); $user->encryptPassword(); } # if login with fb, activate the user $user->is_activated = true; if ($user->save(false)) { return $user; } }