models/db.py
from gluon.tools import Auth,Crud, Service, prettydate
from gluon.contrib.login_methods.basic_auth import basic_auth
import datetime
crud, service = Crud(db), Service(),
auth = Auth(db)
auth.define_tables(username=True)
auth.settings.allow_basic_login = True
auth.settings.hmac_key = 'sha512:a-pass-phrase'
auth.settings.password_min_length = 4
auth.settings.login_after_registration = True
auth.settings.create_user_groups = False
auth.settings.login_email_validate = False
auth.settings.login_methods = [basic_auth('http://127.0.0.1:8000')]
...
session
<https://marsrover-dev.eng.yorku.ca/examples/global/vars/session>.connect(request
<https://marsrover-dev.eng.yorku.ca/examples/global/vars/request>, response
<https://marsrover-dev.eng.yorku.ca/examples/global/vars/response>, db) #VERY
IMPORTANT
My only concern is the line with basic_auth above, right now its pointed to
127.0.0.1:8000, but it seems to be working on my webserver so maybe that should
be just blank.
controllers/default.py
@service.jsonrpc
def count():
session.counter = (session.counter or 0) + 1
return dict(counter=session.counter, now=request.now)
def user():
return dict(form=auth())
def download():
return response.download(request, db)
@auth.requires_login()
def call():
#session.forget(response) #uncomment if you do NOT want sessions
return service()
def tester():
from gluon.contrib.simplejsonrpc import ServerProxy
URL = "http://user:[email protected]:8000/app/default/call/jsonrpc"
service = ServerProxy(URL, verbose=True)
return dict(count=service.count())
The tester you can output on a webpage or you can do it in the terminal.
Now remember even though you have authentication if you want to manage a
session you will need to manually send HTTP headers since the simplejsonrpc
does not store the session cookie, and I have not found an implementation
in Python that does. So I just use the requests library to build the
message and then the count session variable increases by 1 and is stored.
You can either store it as a static file or on the database(my case).
Good luck.
On Monday, February 4, 2013 1:44:31 AM UTC-5, Anthony wrote:
>
> But that text is preceded by:
>
> Some times you want to implement your own logic and do "manual" user
> login. This can also be done by calling the function:
>
> user = auth.login_bare(username,password)
>
>
> To me, that says you can do a manual user login by calling
> auth.login_bare() (the method name is kind of a giveaway as well). What
> else should it say?
>
> Anthony
>
> On Sunday, February 3, 2013 10:05:16 PM UTC-5, encompass wrote:
>>
>> I copied the text from the web2py book online. It should say that they
>> user is then logged in. At least for me it needed to be more descriptive.
>> BR,
>> Jason
>>
>> On Saturday, January 19, 2013 5:22:11 PM UTC+2, Massimo Di Pierro wrote:
>>>
>>> Where do you read that comment? login_bare does login the user and
>>> returns the user record.
>>>
>>> On Saturday, 19 January 2013 00:31:00 UTC-6, encompass wrote:
>>>>
>>>> The last link was the one I was looking at first. Before this post.
>>>> But
>>>> """
>>>> login_bare returns user if the user exists and the password is valid,
>>>> else it returns False. username is the email if the "auth_user" table
>>>> does not have a "username" field.
>>>> """
>>>> doesn't sound like I logged in a user. It just returns the user and
>>>> returns false. But I will give it a try.
>>>> BR,
>>>> Jason Brower
>>>>
>>>> On Friday, January 18, 2013 11:39:35 PM UTC+2, Alan Etkin wrote:
>>>>>
>>>>> My current app runs with only JSON calls is there a way to make the
>>>>>> login occure with JSON?
>>>>>>
>>>>>
>>>>> Did you check this?
>>>>>
>>>>>
>>>>> http://www.web2py.com/books/default/chapter/29/10#Services-and-Authentication
>>>>>
>>>>> http://www.web2py.com/books/default/chapter/29/09#Access-Control-and-Basic-Authentication
>>>>> http://www.web2py.com/books/default/chapter/29/09#Manual-Authentication
>>>>>
>>>>>
--
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.