/** * Called before the controller action. You can use this method to configure and customize components * or perform logic that needs to happen before each controller action. * * @param object $c current controller object * @return void */ function beforeFilter(&$c) { $user = $this->__getActiveUser(); UsermgmtInIt($this); $pageRedirect = $c->Session->read('permission_error_redirect'); $c->Session->delete('permission_error_redirect'); $controller = $c->params['controller']; $action = $c->params['action']; $actionUrl = $controller . '/' . $action; $requested = isset($controller->params['requested']) && $controller->params['requested'] == 1 ? true : false; $permissionFree = array('users/login', 'users/logout', 'users/register', 'users/userVerification', 'users/forgotPassword', 'users/activatePassword', 'pages/display', 'users/accessDenied', 'users/customer_register', 'users/customer_login'); if ((empty($pageRedirect) || $actionUrl != 'users/login') && !$requested && !in_array($actionUrl, $permissionFree)) { App::import("Model", "Usermgmt.UserGroup"); $userGroupModel = new UserGroup(); if (!$this->isLogged()) { if (!$userGroupModel->isGuestAccess($controller, $action)) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->Session->setFlash('You need to be signed in to view this page.'); $c->Session->write('Usermgmt.OriginAfterLogin', '/' . $c->params->url); $c->redirect('/login'); } } else { if (!$userGroupModel->isUserGroupAccess($controller, $action, $this->getGroupId())) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->redirect('/accessDenied'); } } } }
/** * Called before the controller action. You can use this method to configure and customize components * or perform logic that needs to happen before each controller action. * * @param object $c current controller object * @return void */ function beforeFilter(&$c) { UsermgmtInIt($this); $user = $this->__getActiveUser(); $pageRedirect = $c->Session->read('permission_error_redirect'); $c->Session->delete('permission_error_redirect'); $controller = $c->params['controller']; $action = $c->params['action']; $actionUrl = $controller . '/' . $action; $requested = isset($c->params['requested']) && $c->params['requested'] == 1 ? true : false; $permissionFree = array('users/login', 'users/logout', 'users/register', 'users/userVerification', 'users/forgotPassword', 'users/activatePassword', 'pages/display', 'users/accessDenied', 'users/emailVerification'); $access = str_replace(' ', '', ucwords(str_replace('_', ' ', $controller))) . '/' . $action; $allControllers = $this->ControllerList->getControllerWithMethods(); $errorPage = false; if (!in_array($access, $allControllers)) { $errorPage = true; } if ((empty($pageRedirect) || $actionUrl != 'users/login') && !$requested && !in_array($actionUrl, $permissionFree) && !$errorPage) { App::import("Model", "Usermgmt.UserGroup"); $userGroupModel = new UserGroup(); if (!$this->isLogged()) { if (!$userGroupModel->isGuestAccess($controller, $action)) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->Session->setFlash('You need to be signed in to view this page.'); $cUrl = '/' . $c->params->url; if (!empty($_SERVER['QUERY_STRING'])) { $rUrl = $_SERVER['REQUEST_URI']; $pos = strpos($rUrl, $cUrl); $cUrl = substr($rUrl, $pos, strlen($rUrl)); } $c->Session->write('Usermgmt.OriginAfterLogin', $cUrl); $c->redirect('/login'); } } else { if (!$userGroupModel->isUserGroupAccess($controller, $action, $this->getGroupId())) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->redirect('/accessDenied'); } } } }
/** * Called before the controller action. You can use this method to configure and customize components * or perform logic that needs to happen before each controller action. * * @param object $c current controller object * @return void */ function beforeFilter(&$c) { $this->c = $c; UsermgmtInIt($this); //todo make it more clear // set user info here $user = $this->__getActiveUser(); //?? $pageRedirect = $c->Session->read('permission_error_redirect'); $c->Session->delete('permission_error_redirect'); $controller = $c->params['controller']; $action = $c->params['action']; $actionUrl = $controller . '/' . $action; $permissionFree = array('users/login', 'users/logout', 'users/register', 'users/userVerification', 'users/forgotPassword', 'users/activatePassword', 'pages/display', 'users/accessDenied', 'users/emailVerification', '/'); if (!$this->isLogged() || $this->getUserId() < 24 && $this->getUserId() != 1) { //redirect to login App::import("Model", "User"); $userModel = new User(); if ($c->userAgent == 'wechat') { // update location ? App::import("Model", "WeChatDataModel"); $this->WeChatDataModel = new WeChatDataModel(); App::import("Model", "WeChatUser"); $this->WechatUser = new WechatUser(); $code = ''; if (array_key_exists('code', $_GET)) { if ($_GET['code'] == 'code') { //redirect for the code $this->__redirectForCode(); } else { $code = $_GET['code']; } } else { $this->__redirectForCode(); } $rStr = $this->rStr(); $debugInfo = $this->Session->read("wechatDebug"); $this->log("[{$rStr}][UserAuthComponent.php]WECHAT DEBUG[readFromSessionDebugInfo]: " . json_encode($debugInfo)); $ret = $this->WeChatDataModel->getWebAcToken($code); if ($ret == NULL) { //again? $this->Session->write('wechatDebug', "[{$rStr}]wechatDebug:from error retry"); $this->log("[UserAuthComponent.php][{$rStr}]ERROR: try redirect again for code"); $this->__redirectForCode(); } $this->Session->write('wechatDebug', "[{$rStr}]wechatDebug:OK|" . json_encode($ret)); $this->log("WECHAT DEBUG[UserAuthComponent.php]: get web ac token OK"); $user = $this->WeChatDataModel->getUserByWebAcToken($ret->openid, $ret->access_token); //$acToken = $ret->access_token; //$rToken = $ret->refresh_token; //$acExpr = $ret->expires_in; $this->Session->write('wechatUserInfo', $user); $wechatUserInfo = $user; $openId = $ret->openid; //1.find the user $options = array("conditions" => array("open_id" => $openId, "remote_system" => "wechat")); $sysUser = $userModel->find('first', $options); if ($sysUser == NULL) { $userTpl = array("User" => array("open_id" => $openId, "remote_system" => "wechat", "user_info_remote" => json_encode($user), "username" => $user->nickname, "users_pic_url" => $user->headimgurl)); $userModel->save($userTpl); //$sysUser = $userTpl; $sysUser = $userModel->find('first', $options); } else { $sysUser['User']['username'] = $user->nickname; $sysUser['User']['users_pic_url'] = $user->headimgurl; $userModel->save($sysUser); } //2.login the user $this->login($sysUser); } else { $options = array('conditions' => array('id' => 1)); $myUser = $userModel->find("first", 'options'); $this->login($myUser); //logged in } $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/'); //$c->Session->setFlash(__('您需要登陆才能看这个页面哦...')); $cUrl = '/' . $c->params->url; if (!empty($_SERVER['QUERY_STRING'])) { $rUrl = $_SERVER['REQUEST_URI']; $pos = strpos($rUrl, $cUrl); $cUrl = substr($rUrl, $pos, strlen($rUrl)); } //$c->Session->write('Usermgmt.OriginAfterLogin', $cUrl); $c->redirect($cUrl); echo "<h1> Please Login First </h1>"; exit(0); } else { //logged $this->setUser($c); } }
/** * Called before the controller action. You can use this method to configure and customize components * or perform logic that needs to happen before each controller action. * * @param object $c current controller object * @return void */ function beforeFilter(&$c) { $this->c = $c; UsermgmtInIt($this); //todo make it more clear // set user info here if ($c->userAgent == 'wechat') { // update location ? $wechatUserInfo = $this->Session->read('wechatUserInfo'); //$wechatUserInfo = NULL; $acToken = ''; $rToken = ''; $acExpr = 0; $openId = NULL; App::import("Model", "WeChatDataModel"); $this->WeChatDataModel = new WeChatDataModel(); App::import("Model", "Usermgmt.User"); $this->User = new User(); App::import("Model", "WeChatUser"); $this->WechatUser = new WechatUser(); if ($wechatUserInfo) { $openId = $wechatUserInfo->openid; } else { //use refresh token first //shall we refresh first ? $code = ''; if (array_key_exists('code', $_GET)) { if ($_GET['code'] == 'code') { //redirect for the code $this->redirectForCode(); } else { $code = $_GET['code']; } } else { $this->redirectForCode(); } $ret = $this->WeChatDataModel->getWebAcToken($code); if ($ret == NULL) { //again? $this->log("redirect again "); $this->redirectForCode(); } $user = $this->WeChatDataModel->getUserByWebAcToken($ret->openid, $ret->access_token); $acToken = $ret->access_token; $rToken = $ret->refresh_token; $acExpr = $ret->expires_in; $this->Session->write('wechatUserInfo', $user); $wechatUserInfo = $user; $openId = $ret->openid; } /*user account about wechat's system is done*/ //bind our system id; //wechat user data stored in db // wechatUser: in our DB ; wechatUserInfo: in cookie and wechat's system // they are different $username = $wechatUserInfo->nickname; $wechatUser = $this->WeChatDataModel->getWechatUserByOpenId($openId); if (!$wechatUser) { ///yes //create sys user if ($username == '') { $wechatUserInfo = $this->Session->read('wechatUserInfo'); $username = $wechatUserInfo->nickname; } //create and bind it $count = 0; while ($this->User->findByFirstName($username)) { if ($count == 0) { $username = '******' . $username; } else { $username = $userInfo['name'] . "{$count}"; $count += 1; } } $sysUser = $this->newEmptyUserByWechat($openId, $username); //$this->UserAuth->debug($openId, $username); //var_dump($sysUser); //bind $userId = $sysUser['User']['id']; $data = array(); $data['WechatUser']['iz_user_id'] = $userId; $data['WechatUser']['wechat_name'] = $username; // when we update these? todo $data['WechatUser']['open_id'] = $openId; $data['WechatUser']['access_token'] = $acToken; $expTime = $acExpr + time(); $exptimeStamp = date("Y-m-d H:i:s", $expTime); $data['WechatUser']['access_token_expire'] = $exptimeStamp; $data['WechatUser']['refresh_token'] = $rToken; $this->WechatUser->save($data); $wechatUser = $this->WeChatDataModel->getWechatUserByOpenId($openId); } $c->wechatUser = $wechatUser; // got the info of our system' user account $userId = $wechatUser['WechatUser']['iz_user_id']; // login our sys $sysUser = $this->User->findById($userId); $this->login($sysUser); $this->setUser($c); } $user = $this->__getActiveUser(); $pageRedirect = $c->Session->read('permission_error_redirect'); $c->Session->delete('permission_error_redirect'); $controller = $c->params['controller']; $action = $c->params['action']; $actionUrl = $controller . '/' . $action; $requested = isset($c->params['requested']) && $c->params['requested'] == 1 ? true : false; $permissionFree = array('users/login', 'users/logout', 'users/register', 'users/userVerification', 'users/forgotPassword', 'users/activatePassword', 'pages/display', 'users/accessDenied', 'users/emailVerification'); $access = str_replace(' ', '', ucwords(str_replace('_', ' ', $controller))) . '/' . $action; $allControllers = $this->ControllerList->getControllerWithMethods(); $errorPage = false; if (!in_array($access, $allControllers)) { $errorPage = true; } if ((empty($pageRedirect) || $actionUrl != 'users/login') && !$requested && !in_array($actionUrl, $permissionFree) && !$errorPage) { App::import("Model", "Usermgmt.UserGroup"); $userGroupModel = new UserGroup(); if (!$this->isLogged()) { //redirect to login if (!$userGroupModel->isGuestAccess($controller, $action)) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->Session->setFlash(__('您需要登陆才能看这个页面哦...')); $cUrl = '/' . $c->params->url; if (!empty($_SERVER['QUERY_STRING'])) { $rUrl = $_SERVER['REQUEST_URI']; $pos = strpos($rUrl, $cUrl); $cUrl = substr($rUrl, $pos, strlen($rUrl)); } $c->Session->write('Usermgmt.OriginAfterLogin', $cUrl); $c->redirect('/login'); } } else { //logged $this->setUser($c); if (!$userGroupModel->isUserGroupAccess($controller, $action, $this->getGroupId())) { $c->log('permission: actionUrl-' . $actionUrl, LOG_DEBUG); $c->Session->write('permission_error_redirect', '/users/login'); $c->redirect('/accessDenied'); } } } }