예제 #1
1
파일: errors.php 프로젝트: qujian/rwe
 *
 * @copyright     Copyright 2013, Union of RAD (http://union-of-rad.org)
 * @license       http://opensource.org/licenses/bsd-license.php The BSD License
 */
use lithium\core\ErrorHandler;
use lithium\action\Response;
use lithium\net\http\Media;
use app\extensions\util\HttpUserAgentUtil;
ErrorHandler::apply('lithium\\action\\Dispatcher::run', array(), function ($info, $params) {
    $response = new Response(array('request' => $params['request'], 'status' => $info['exception']->getCode()));
    // 根据抛出来的错误类型而进行处理, 这里分开发和生产环境, 方便开发环境进行异常处理
    $exception = $info['exception'];
    $template = 'production';
    $layout = 'default';
    $mobile = false;
    if (!empty($_SERVER['HTTP_USER_AGENT']) && HttpUserAgentUtil::is_mobile($_SERVER['HTTP_USER_AGENT'])) {
        $mobile = true;
    }
    $environment = environment_config();
    if ($environment['environment'] == 'production') {
        if ($mobile) {
            $layout = 'mobile';
            $template = 'mobile';
        }
    } else {
        $layout = 'error';
        $template = 'development';
    }
    if ($exception instanceof \app\extensions\core\exception\WeixinLoginException) {
        $template = $environment['environment'] == 'production' ? 'business/weixin_login_failed' : 'development';
    }
예제 #2
1
 /**
  * oauth2 绑定用户, 这步主要是想通过加密的token获得用户uid.
  */
 public function bind()
 {
     $token = rawurldecode($this->request->query['token']);
     $weixin_user_id = EncryptUtil::decrypt($token, WeixinUsers::KEY_ENCRYPT);
     if (!is_numeric($weixin_user_id)) {
         // 解密失败
         throw new DispatchException('Weixin token descrypt failed.');
     }
     // 		$key = WeixinUsers::CACHE_KEY_TOKEN_PREFIX . $weixin_user_id;
     // 		$cache = CacheUtil::cache_get($key);
     // 		if (empty($cache)) {
     // 			// 该链接已过期
     // 			throw new DispatchException('Weixin token expired.');
     // 		}
     // 		CacheUtil::cache_delete($key);
     $ref_url = UrlUtil::get_safe_redirect_url($this->request->query['ref_url']);
     $ref_url = empty($ref_url) ? urlencode(SYS_PATH . '/mobile') : $ref_url;
     $url = HttpUserAgentUtil::get_weixin_oauth2_url($weixin_user_id, $ref_url);
     return $this->redirect($url, array('exit' => true));
 }
예제 #3
0
 protected function _init()
 {
     parent::_init();
     // 判断其是否从 mobile 端请求过来
     if (!empty($_SERVER['HTTP_USER_AGENT']) && HttpUserAgentUtil::is_mobile($_SERVER['HTTP_USER_AGENT'])) {
         $this->_mobile = true;
     }
 }
예제 #4
0
파일: auth.php 프로젝트: qujian/rwe
<?php

use app\services\OauthWeixinUserService;
use app\extensions\util\HttpUserAgentUtil;
use lithium\action\Response;
use app\services\UserService;
use lithium\net\http\Router;
use lithium\action\Dispatcher;
/**
 * 拦截登录过滤器, 检测页面访问权限.
 */
Dispatcher::applyFilter('run', function ($self, $params, $chain) {
    $router = Router::parse($params['request']);
    if (empty($router->params)) {
        return $chain->next($self, $params, $chain);
    } else {
        $router = $router->params;
    }
    if (UserService::check_auth($router)) {
        // 如果是微信里的页面, 则需要注入当前的微信用户信息
        if (HttpUserAgentUtil::is_weixin()) {
            OauthWeixinUserService::set_current_oauth_user();
        }
        return $chain->next($self, $params, $chain);
    } else {
        $login_url = SYS_PATH . '/user/login?ref_url=' . urldecode(current_url());
        return new Response(array('location' => $login_url));
    }
});