Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.11.2009, 01:35
ltise вне форума Посмотреть профиль Отправить личное сообщение для ltise Найти все сообщения от ltise
  № 1  
Ответить с цитированием
ltise

Регистрация: Apr 2009
Адрес: Moskva
Сообщений: 20
Question Authenticate using a RPC call and AMFPHP

Привет всем!

Скачал из сети пример авторизации с использованием сессии AMFPHP.

PHP:

PHP код:
<?php
session_start
();

//$p = new MyService();
//$p->authenticateUser('s', 'd');

class MyService {

        public function 
MyService() {

        }

        public function 
authenticateUser($user$pass) {
                if (
$user && $pass) {
                        
$_SESSION['user'] = 'admin';
                        
$_SESSION['level'] = 2;
                
$return = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<res>
        <message>User was authenticated!</message>
</res>
EOD;
                return 
$return;
                } else {
                        
$_SESSION['user'] = null;
                        
$_SESSION['level'] = null;
                }
        }

        public function 
methodThatNeedsAuthUser() {
                if (isset(
$_SESSION['user']) && isset($_SESSION['level'])) {
                        
$return = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<res>
        <message>User is authenticated!</message>
</res>
EOD;
                } else {
                        
$return = <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<res>
        <message>Error, user is not authenticated!</message>
</res>
EOD;
                }
                return 
$return;
        }


}


?>

MXML:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
	<![CDATA[
		import mx.rpc.AsyncResponder;
		import mx.rpc.AsyncToken;
		import mx.rpc.events.FaultEvent;
		import mx.controls.Alert;
		import mx.rpc.events.ResultEvent;
 
		/**
		 * URL pointing to PHP folder files
		 */ 
		private static const SERVER_URL:String = "http://user_auth.net/"	
		/**
		 * use to store the token retrieved from the server
		 */ 
		private var myToken:String = "";
 
		/**
		 * It gets called when the application finished to load.
		 * initialize the endpoint value for the RemoteObject
		 */ 
		private function init():void {
			myRPC.endpoint = SERVER_URL + "amfphp/gateway.php";
		}
 
		/**
		 * Result listenere for HTTPService or RemoteObject.
		 * Just show the received response in an Alert 
		 * @param ResultEvent
		 */  
		private function resultListener(event:ResultEvent):void {
			Alert.show(event.result.toString(), 'Server Response');
		} 
 
		/**
		 * Error handler to be used by the HTTPService and RemoteObject;
		 * Alert the error message
		 * @param FaultEvent
		 */ 
		private function errorListener(event:FaultEvent):void {
			Alert.show(event.fault.faultString, 'Error');
		} 
 
 
	]]>
</mx:Script>
 
	<mx:RemoteObject id="myRPC" 
		source="MyService" 
		destination = "MyService" 
		result="resultListener(event)" fault="errorListener(event)" showBusyCursor="true">
		<mx:method name="authenticateUser">
			<mx:arguments>
				<name>admin</name>
				<password>pass</password>
			</mx:arguments>
		</mx:method>
		<mx:method name="methodThatNeedsAuthUser"/>
	</mx:RemoteObject>
 
 
	<mx:VBox x="167" y="312" height="158" width="400">
		<mx:Label text="Using RemoteObject and AMFPHP" fontWeight="bold" fontSize="12"/>
		<mx:Button label="Authenticate using a RPC call" click="myRPC.authenticateUser()"/>
		<mx:Button label="RPC call to a method that required Authenticated User" click="myRPC.methodThatNeedsAuthUser()"/>
	</mx:VBox>
 
</mx:Application>
При тестировании функций в консоли AMFPHP все работает как надо, т.е. ввожу параметры первой функции "authenticateUser", user & pass жму "call" - получаю results:

"<?xml version="1.0" encoding="utf-8"?>
<res>
<message>User was authenticated!</message>
</res>"

т.е. все пучком..

далее, даже после рефреша, жму вторую функцию "methodThatNeedsAuthUser"
также получаю, что все в норме:
"<?xml version="1.0" encoding="utf-8"?>

<res>
<message>User is authenticated!</message>
</res>"
т.е. все в норме, при этом если данные сессии скидывать в лог, то все зашибись, данные сохраняются....
лог:

[09-11-12 00:28:26]
'call MyService.authenticateUser'
[09-11-12 00:28:26]
'admin'
[09-11-12 00:28:26]
'password'

[09-11-12 00:28:30]
'call MyService.methodThatNeedsAuthUser'
[09-11-12 00:28:30]
'admin'


НО! почему-то из своего приложения (см.выше) первая функция проходит нормально, но
вторя функция получает в сессии пустые данные, т.е. авторизация не проходит... лог:

[09-11-12 00:29:54]
'call MyService.authenticateUser'
[09-11-12 00:29:54]
'admin'
[09-11-12 00:29:54]
'pass'
[09-11-12 00:29:59]

'call MyService.methodThatNeedsAuthUser'
[09-11-12 00:29:59]
NULL


Не могу понять в чем может быть проблема, почему сессия слетает при вызове второй функции ?
Присоветуйте плиз что лечить надо ...

Спасибо

Старый 12.11.2009, 02:38
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Протестировал ваш код. Работает все нормально, сессия сохраняется во время тестирования приложения.
Единственное изменение: убрал из php блоки <<<EOD, но, вряд ли это как-то с этим связно.

Старый 12.11.2009, 10:20
ltise вне форума Посмотреть профиль Отправить личное сообщение для ltise Найти все сообщения от ltise
  № 3  
Ответить с цитированием
ltise

Регистрация: Apr 2009
Адрес: Moskva
Сообщений: 20
Цитата:
Сообщение от udaaff Посмотреть сообщение
Протестировал ваш код. Работает все нормально, сессия сохраняется во время тестирования приложения.
Единственное изменение: убрал из php блоки <<<EOD, но, вряд ли это как-то с этим связно.
Спасибо.
С утра въехал, что запускал не через сервер, а из под билдера - на прямую..типа c:\my documents\myprojects.....
ясен пень, что никих сессий не сохранялось

Перенес все в home\www - заработало

Но теперь другая проблема, база и AMFPHP живут на другом хосте, чем мой сервер..
что надо исправить, чтобы приложения с моего сервера могли достучаться сервисов на другом сервере ?

Сейчас выводит:
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Security.Error error Error #2048: Security sandbox violation: http://flex_.net/AuthTest.swf cannot load data from http://user_auth.net/amfphp/gateway.php. url: 'http://user_auth.net/amfphp/gateway.php'"] messageId="F38858D9-3AB3-F170-E39E-E7236AD528C0" type="fault" bubbles=false cancelable=true eventPhase=2]

чета не могу найти внятной инфы... положил на сервер crossdomain.xml в корень Z:\home\user_auth.net\www -
результата никакого...

Возможно у меня что-то в настройках не так..
какие конфигурационные файлы могу влиять на результат ?

Спасибо


Последний раз редактировалось ltise; 12.11.2009 в 10:48.
Старый 12.11.2009, 10:31
lighto вне форума Посмотреть профиль Отправить личное сообщение для lighto Найти все сообщения от lighto
  № 4  
Ответить с цитированием
lighto
[+1 17.02.10]
 
Аватар для lighto

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
в файле services-config.xml строчка
<endpoint uri="/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
менять uri="/amfphp/gateway.php"
__________________
Flex+AS3 good)

Старый 12.11.2009, 11:15
ltise вне форума Посмотреть профиль Отправить личное сообщение для ltise Найти все сообщения от ltise
  № 5  
Ответить с цитированием
ltise

Регистрация: Apr 2009
Адрес: Moskva
Сообщений: 20
Цитата:
Сообщение от lighto Посмотреть сообщение
в файле services-config.xml строчка
<endpoint uri="/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
менять uri="/amfphp/gateway.php"
Поменял - всерно не пашет....

Код AS1/AS2:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
    <services>
        <service id="sabreamf-flashremoting-service"
                 class="flex.messaging.services.RemotingService"
                 messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="amfphp">
                <channels>
                    <channel ref="my-amfphp"/>
                </channels>
                <properties>
                    <source>*</source>
                </properties>
            </destination>
        </service>
    </services>
 
    <channels>
        <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://user_auth.net/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
</services-config>

Старый 12.11.2009, 12:09
lighto вне форума Посмотреть профиль Отправить личное сообщение для lighto Найти все сообщения от lighto
  № 6  
Ответить с цитированием
lighto
[+1 17.02.10]
 
Аватар для lighto

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
Слушай а база на том же сервере что и AMFPHP или на том где *.swf ?
А все увидел так может проблемы в коннекте к базе? ты его настраиваешь в as-файле?
Код AS3:
import phi.interfaces.IQuery;
import phi.interfaces.IDatabase;
import phi.db.Database;
import phi.db.Query;
//_______________________________
private var db :IDatabase;  
private var query1 :IQuery;
//_______________________________
 
private function onCreateComplete():void
{
db = Database.getInstance();
query1=new Query();
db.connect("conn1","root","","localhost","test",true);
query1.connect("conn1",db);
}
"conn1","root","","localhost","test",true - свои ставить

Добавлено через 7 минут
да и onCreateComplete() ну это ясно что при создании его воткнуть, но на всякий случай напишу)
__________________
Flex+AS3 good)


Последний раз редактировалось lighto; 12.11.2009 в 12:15.
Старый 12.11.2009, 12:24
ltise вне форума Посмотреть профиль Отправить личное сообщение для ltise Найти все сообщения от ltise
  № 7  
Ответить с цитированием
ltise

Регистрация: Apr 2009
Адрес: Moskva
Сообщений: 20
база там же где и amfphp.
но прикол в том, что нет доступа к сервисам amfphp, вне зависимости от базы...
базу из флекса я вообще не планирую трогать, мне нужны только сервисы...

сервисы живут тут (на локале ессно)
http://user_auth.net/

swf живет здесь
http://flex_.net/AuthTest.swf

запускаю http://flex_.net/AuthTest.html - получаю ошибку (см.выше)
если скопировать AuthTest.* в http://user_auth.net/ и запускать оттедова, то все пашет как надо ...
нарыл инфу про crossdomain.xml пробовал и так и этак - ниче не получается


Последний раз редактировалось ltise; 12.11.2009 в 12:31.
Старый 12.11.2009, 12:27
lighto вне форума Посмотреть профиль Отправить личное сообщение для lighto Найти все сообщения от lighto
  № 8  
Ответить с цитированием
lighto
[+1 17.02.10]
 
Аватар для lighto

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
мда вы меня тоже заинтересовали. ну что сказать я не знаю(((. посмотрим что остальные скажут.
__________________
Flex+AS3 good)

Старый 16.11.2009, 00:30
crazy_bary вне форума Посмотреть профиль Отправить личное сообщение для crazy_bary Найти все сообщения от crazy_bary
  № 9  
Ответить с цитированием
crazy_bary
 
Аватар для crazy_bary

Регистрация: Oct 2009
Сообщений: 1
По умолчанию Authenticate using a RPC call and AMFPHP

Доброго всем времени суток.
Подскажите, пожалуйста.

К примеру есть
mx:ScriptCDATA
Bindable
private var bt:Button=new Button;


Bindable
public var menuCollection:XMLListCollection; // создается на основе dataXML

private function changeHandlerevent:MenuEvent:void

var ob:Button = Buttonevent.item.data; //летит исключение


private function init:void //инициализирующий метод
menuCollection = new XMLListCollectionnew XMLListdataXML;


/mx:Script
mx:XML id="dataXML"
menuitem label="Menu1"
menuitem label="Test" type="check" data="bt"/
menuitem type="separator"/
menuitem label="Test" type="check" data="yes"
menuitem label="one" group="gr1" type="radio"/
menuitem label="two" group="gr1" type="radio"/
/menuitem
menuitem label="Test" type="check" data="yes"/
/menuitem
/mx:XML


mx:MenuBar labelField="label" dataProvider="menuCollection" itemClick="changeHandlerevent"/

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.