【问题标题】:CometChat integration with laravel 5.1CometChat 与 laravel 5.1 的集成
【发布时间】:2016-12-26 01:04:31
【问题描述】:

我的问题涉及将 CometChat 与 laravel 5.1 集成。

我正在尝试在 Cometchat 的 integration.php 文件中授予对 Laravel 的访问权限。我想授予对 Session 类的访问权限,以便我可以从数据库中访问会话信息(默认情况下,Cometchat 使用文件会话)。 目前我已将 Laravel 切换为使用文件会话。

那么我怎样才能从 Laravel 访问会话,以便在 integration.php 文件中访问它?

【问题讨论】:

    标签: php laravel-5.1 integration cometchat


    【解决方案1】:

    好的,我想我已经解决了。下面的代码让我可以访问现有的 Laravel 应用程序,我可以访问 Session 甚至 Sentinel。

    我还添加了一个指向 vendor/autoload.php 的包含,它现在允许我访问 QueryBuilder 和其他系统。

    在 integration.php 的顶部我有:

    // integration.php includes the laravel files to give access, it just
    // didn't use it fully
    
    $app->make('Illuminate\Contracts\Http\Kernel')->handle(Illuminate\Http\Request::capture());
    
    $id = $app['encrypter']->decrypt($_COOKIE[$app['config']['session.cookie']]);
    $app['session']->driver()->setId($id);
    $app['session']->driver()->start();
    

    这将返回当前正在运行的 Laravel,然后我就可以执行类似 $app['session']->get('dataname') 的操作

    虽然添加了 vendor/autoload.php 我现在也可以访问 DB::tableSentinel::getUser()

    【讨论】:

      【解决方案2】:

      请在include_once( dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'bootstrap'.DIRECTORY_SEPARATOR.'app.php'); 行之后添加以下行。

      include_once( dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'Controllers'.DIRECTORY_SEPARATOR.'Auth'.DIRECTORY_SEPARATOR.'app.php');
      

      将 integration.php 文件中的 getUserID() 函数替换为以下内容,或者您​​可以从 http://my.cometchat.com 下载适用于 Laravel 5 的 CometChat 包

      function getUserID() {
          $userid = 0;
          if (!empty($_SESSION['basedata']) && $_SESSION['basedata'] != 'null') {
              $_REQUEST['basedata'] = $_SESSION['basedata'];
          }
      
          if (!empty($_REQUEST['basedata'])) {
              if (function_exists('mcrypt_encrypt') && defined('ENCRYPT_USERID') && ENCRYPT_USERID == '1') {
                  $key = "";
                  if( defined('KEY_A') && defined('KEY_B') && defined('KEY_C') ){
                      $key = KEY_A.KEY_B.KEY_C;
                  }
                  $uid = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode(rawurldecode($_REQUEST['basedata'])), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
                  if (intval($uid) > 0) {
                      $userid = $uid;
                  }
              } else {
                  $userid = $_REQUEST['basedata'];
              }
          }
          if (!empty($_COOKIE['laravel_session'])) {    
              $app = app();
              $kernel = $app->make('Illuminate\Contracts\Http\Kernel');
              $response = $kernel->handle(
                  $request = Illuminate\Http\Request::capture()
                  );
              $id = $app['encrypter']->decrypt($_COOKIE[$app['config']['session.cookie']]);
              $app['session']->driver()->setId($id);
              $app['session']->driver()->start();
              if($app['auth']->user()!= NULL){
                  $userid = $app['auth']->user()->id;
              }
          }
          $userid = intval($userid);
          return $userid;
      }
      

      【讨论】:

      • 虽然我可以这样做,但添加额外的包含现在可以让我直接访问 Session,甚至更好的 Sentinel,它是当前正在使用的用户身份验证包。所以不是大函数,而是一行:return Sentinel::getUser()->id;
      猜你喜欢
      • 2016-01-06
      • 2016-03-02
      • 2017-05-11
      • 2018-01-25
      • 2015-11-02
      • 2018-01-21
      • 2015-12-20
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多