Codeigniter + TankAuth + Swfupload не может получить идентификатор пользователя регистратора - PullRequest
0 голосов
/ 09 декабря 2010

Я использую Codeigniter с установленной библиотекой TankAuth и пытаюсь загрузить его в файл index.php / запросы / doUpload из swfupload, но не могу получить доступ к странице с проверкой подлинности. Я прочитал много постов в сети о подобной проблеме и попытался установить $config['sess_match_useragent'] = FALSE;, но все равно без разницы. В итоге я пропустил проверку входа в мой контроллер для тестирования. Но теперь мне нужно получить доступ к библиотеке tankAuth из моего контроллера, чтобы получить текущий зарегистрированный идентификатор пользователя. Он запрашивается в моем приложении и не может его пропустить, мне действительно нужно передать зарегистрированный идентификатор пользователя этой модели doUpload. У меня есть контроллер настройки, как это:

function doUploadFileFn() {
        if (!$this->tank_auth->is_logged_in()) {
            return;
        } else {
            $user_id = $this->tank_auth->get_user_id();
            $this->load->model('requests/doUploadFile');
            $this->doUploadFile->uploadData($user_id);
            }

    }

Теперь он не проходит проверку is_logged_in (), как я узнал из других сообщений, CI удаляет сеанс, но я настроил конфигурацию так, чтобы она не соответствовала пользовательскому агенту, но все еще не работает.

Есть ли какое-нибудь решение этого вопроса?

Ответы [ 3 ]

2 голосов
/ 05 января 2011

Следуя инструкциям на форумах CI Мне удалось добиться того, о чем вы просите.
1) Поместите это в конфигурацию SWFUpload JS:

post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"},

2) И поместите файл MY_Session.php в папку application/libraries/.

3) Новая библиотека должна быть загружена в тот момент, когда загружается представление, если нет (по какой-то причине), тогда загрузите вашу библиотеку в контроллер.

PS: вам необходимо установить:

$config['sess_match_useragent'] = FALSE;

В противном случае для агента будет создан новый сеанс Shockwave Flash

РЕДАКТИРОВАТЬ: Хорошона основе вашего комментария .. вам действительно нужно установить настройку post_params на текущую сессию, чтобы ее можно было отправлять, когда вспышка post на ваш контроллер, теперь в вашем случае лучшее, что я могу придумать, это ниже:
Ваш externalUntouchableJsFile.js:

// JS scripts...  
...
var swfu = new SWFUpload({  
    ...
    ...
    post_params: GLOBAL_VAR,
    ...
});  
    ...  
// rest of your JS

И в вашем представлении PHP и перед загрузкой этого файла JS есть что-то вроде:

<script>  
var GLOBAL_VAR = {};  
<?php if(session_is_there) { ?>
GLOBAL_VAR = {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"}
<?php } ?>  
</script>
<script type="text/javascript" src="<?php echo base_url() ?>path/to/js/externalUntouchableJsFile.js"></script>

РЕДАКТИРОВАТЬ 2: Поскольку вы используете внешний файл js, вы можете забыть определить глобальную переменную, поэтому используйте:

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,
0 голосов
/ 05 января 2011

Мне удалось применить грубое исправление для этого, передав идентификатор зарегистрированного пользователя в URL, и получив его из Javascript с функциями URL. Это лучший метод, на который я могу положиться прямо сейчас, меня не слишком беспокоит, что идентификатор пользователя виден, потому что я использую управляемый iframe для отображения этой конкретной части приложения, а приложение предназначено только для внутреннего использования компанией. ,

Спасибо за ваши ответы.

0 голосов
/ 05 января 2011

Стоит упомянуть, что файл Flash должен обслуживаться с того же домена, что и ваш сайт CI, иначе один не сможет прочитать файлы cookie другого пользователя. Также убедитесь, что путь к файлу cookie для входа установлен в корневой путь. Если SWFUpload не может прочитать cookie-файл для входа, он также не может отправить его.

Flash имеет ограниченный доступ к сеансовым cookie-файлам, , как описано здесь на форуме SWFUpload . Возможно ли, что вы установили автоматический вход в систему, чтобы избежать установки срока действия (в config / tank_auth.php), тем самым делая его сессионным cookie? В этом случае SWFUpload SWF может быть не в состоянии получить доступ или отправить значение файла cookie автологина, в зависимости от версии проигрывателя Flash на компьютере. Дважды проверьте значения срока действия файлов cookie, используя инструмент отладки, такой как Firebug, чтобы убедиться, что это так. Если загрузка работает, когда вы устанавливаете флажок «запомнить» меня, но не иначе, это указывает на проблему с файлом cookie сеанса.

Чтобы заставить SWF-файл передавать значение файла cookie TankAuth при загрузке файлов, вы можете сначала перегрузить функцию get_cookie вспомогательного файла cookie, чтобы искать значения в массиве $ _COOKIE или массиве $ _POST. Затем, похоже, что с SWFUpload v2 вы можете отправить дополнительные значения POST вместе с загрузкой , и это будет способ отправки ключа автологина, который затем позволит вашему контроллеру получить user_id. Но прежде чем взломать помощника Cookie, сначала убедитесь, что ваши движущиеся части работают, как описано в первом абзаце.

...