Yes I assumed both apps are written in web2py. Yet the protocol it uses is 
CAS 2.0 therefore that works even if application A is not written in web2py 
as long as it suports CAS 2.0.

Another possibility is, if application A runs under apache, to use the 
server access control to delegate authentication to web2py (application B). 
For this look into web2py/scripts/access.wsgi.

On Sunday, 17 February 2013 19:10:43 UTC-6, Amber Doctor wrote:
>
> Hi Massimo, 
>
> I'm going to explore this option more.  Just a quick question though.  It 
> seems like both application A and B need to be web2py.  Is that true?  
> Application A isn't a web2py application.  
>
> Also I learned more about the client's criteria -- they mostly just want a 
> form on application A's website that has a username and password blank.  On 
> submit it redirects to a web2py application, authenticates the 
> username/password and leaves the user logged in and at a page of the web2py 
> application.  Will the method you described handle this or is there a 
> better method?
>
>
> On Sun, Feb 17, 2013 at 5:22 PM, Massimo Di Pierro 
> <massimo....@gmail.com<javascript:>
> > wrote:
>
>> Hello Amber,
>>
>> You do not need to reinvent the wheel for this. Web2py can do it out of 
>> the box.
>>
>> Application B. No special code. Just any web2py application that uses 
>> Auth and exposes the normal default/user action.
>>
>> Application A. Use decorators like @auth.requires_login() as normal but 
>> change 
>>
>>    auth = Auth(db)
>>
>> into
>>
>> auth = Auth(db,cas_provider = 
>> 'http://127.0.0.1:8000/applicaiton_B/default/user/cas')
>>
>>
>> You can read more about this here:
>>
>>    http://web2py.com/books/default/chapter/29/09?search=cas_provider
>>
>> If the two applications have different domains you need to add a line 
>> like this in application B.
>>
>> auth.settings.cas_domains.append('application_A_domain.com')
>>
>>
>>
>> On Sunday, 17 February 2013 12:43:28 UTC-6, Amber Doctor wrote:
>>>
>>> Currently I have an application (A) that redirects the user to a web2py 
>>> application (B) to log in.  I want to change it so that the application A 
>>> instead calls B with a username/password and gets back dict(user:user) 
>>> where user is the result of auth.login_bare(username,**password).  I 
>>> have made a web2py app to mock A calling B with a Post.  I have also 
>>> created the method in B to accept the data.   Controllers provided below.  
>>> When I make the call, A is correctly getting the user information based on 
>>> whether or not B is able to log in the user.  However, when I try to 
>>> navigate around application B's pages that are behind login, I'm told that 
>>> I am not logged in.  
>>>
>>> For a quick sanity check, I also created a controller marked C, that 
>>> uses the auth.login_bare and not a POST and it works to log me into B
>>>
>>> Can anyone please provide insight into what I need to be doing 
>>> differently to allow A to log into B by passing username/password?
>>>
>>>
>>> A
>>> def test_remote_login():
>>>     form = SQLFORM(db.remote_login).**process()
>>>     if form.accepted:
>>>         username = form.vars.remote_login_**username
>>>         password = form.vars.remote_login_**password
>>>         access_method = form.vars.access_method
>>>         import httplib, base64, urllib
>>>         params = urllib.urlencode({'username':**username,
>>>                               **      'password':password
>>>                               **      })
>>>         base64string = base64.encodestring('%s:%s' % (username , 
>>> password))[:-1]
>>>         username_password_combo = "Basic " + base64string
>>>         headers = {"Content-type": "application/x-www-form-**urlencoded", 
>>> "Accept": "text/plain", "Authorization": username_password_combo}
>>>         conn = httplib.HTTPConnection(task_**tracker_host_defined)
>>>         connection_url = '/tasktracker3/default/remote_**login' + 
>>> access_method
>>>         conn.request("POST", connection_url, params, headers)
>>>         r1 = conn.getresponse()
>>>         data1 = r1.read()
>>>         conn.close()
>>>         response.flash='Accepted'
>>>     return locals()
>>>
>>>
>>> B
>>> @request.restful()
>>> def remote_login():
>>>     def POST(username,password):
>>>         user = auth.login_bare(username,**password)
>>>         return dict(user=user)
>>>     return locals()
>>>
>>> C
>>> def test_remote_login():
>>>     username = request.args(0)
>>>     password = request.args(1)
>>>     user = auth.login_bare(username,**password)
>>>     return dict(user=user)
>>
>>  -- 
>>  
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to web2py+un...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to