You can use a modified call() action:
def call_w_auth():
"""
exposes services. for example:
http://..../[app]/default/call/jsonrpc
decorate with @services.jsonrpc the functions to expose
supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
"""
auth.settings.allow_basic_login = True
auth.basic(basic_auth_realm='any realm is fine')
return service()
@service.soap('MyFunction',returns={'result':int},args={'a':int,'b':int,})
def myfunction(a, b):
return a + b
def call():
return service()
Call it with:
from gluon.contrib.pysimplesoap.client import SoapClient
client = SoapClient(wsdl="http://..../app/mycontroller/call_w_auth/soap?WSDL")
response = client.MyFunction(a=1,b=2)
return response['result']