Каков хороший способ передать информацию об аутентификации методам API в PHP NuSoap?

Я использую NuSoap для реализации сервера API. Общедоступный API SOAP может иметь такой метод, как:

function createComment(articleID, content);

В идеале это создаст комментарий к данной статье и припишет его пользователю, прошедшему проверку подлинности.

Аутентификация осуществляется через http auth. Итак, объект nusoap_server содержит информацию о пользователе.

Как createComment может получить доступ к этой информации? Он ничего не знает о сервере. Я хотел избежать размещения информации о пользователе в глобальном пространстве, но я начинаю думать, что нет другого простого способа.

Существует ли метод, который позволяет открытой подписи для метода оставаться такой, как указано выше, в то время как метод реализации имеет дополнительные аргументы (информация о пользователе)?


person Dave    schedule 16.01.2012    source источник


Ответы (1)


SoapServer предназначен для предоставления средств для удаленного вызова функции с параметрами. Вызываемая функция не имеет никакой информации о SoapServer, обрабатывающем связь, чтобы это произошло — все, что она видит, — это переданный ей параметр. Поэтому, если вы не хотите добавлять учетные данные пользователя в качестве фактических параметров вызова функции, вам нужно будет сделать что-то вроде глобальной регистрации учетных данных. Это не обязательно должно быть явно в глобальной области видимости. Он может быть зарегистрирован в каком-либо экземпляре шаблона реестра значений.

person Jeremy Giberson    schedule 16.01.2012
comment
Это то, что я в итоге сделал. Я надеялся сделать все более аккуратно и избежать глобальных операций, но это было просто непрактично. Мои функции реализации живут внутри класса. У каждого из них есть аргумент для параметров AUTH. Затем я написал глобальные функции, которые его обернули. Каждая глобальная функция обращается к зарегистрированному объекту аутентификации и передает его функции реализации. Увы, если бы в php были декораторы, это решение было бы еще проще. - person Dave; 25.01.2012