I do not see major pros and cons... it is a matter of precerences...

1) setting username=True in auth.define_tables(), define_tables will add a
field on the table (username) and if that field is present, authentication
will be done using username. Personally I prefer to use emails rather than
usernames, and as I am using BOTH web2py auth and facebook at the same  time
for authentication (two different links for different logins), I didn't want
to force my application to use usernames.... so I've used the second option

2) in this case I'm adding an email created by the facebook username +
@facebook and therefore auth will keep using email for authentication...

no web2py code has been touched, although I'm extending Auth and
overriding navbar to display a second login link (facebook) and hide
change_password when it is logged in via facebook.

            if session.login_method_used is None:
                if not 'change_password' in self.settings.actions_disabled:
                    bar.insert(-1, ' | ')
                    bar.insert(-1, password)

and in my controller:

def user():
    if auth.user_id:
        if request.args[0] == 'logout':
            session.login_method_used=None
    else:
        if request.args[0] == 'login':
            session.login_method_used=None
        elif request.args[0] == 'login_fb':
            session.login_method_used="facebook"
            request.args[0]='login'

    if session.login_method_used=="facebook":
        auth.settings.login_form=FaceBookAccount(globals())

    return dict(form=auth())



On Mon, Jun 6, 2011 at 11:16 PM, Massimo Di Pierro <
massimo.dipie...@gmail.com> wrote:

> if there is agreement on one, please send me a patch.
>
> On Jun 6, 4:31 pm, "Sebastian E. Ovide" <sebastian.ov...@gmail.com>
> wrote:
> > Hi Mic,
> >
> > thanks for that.
> >
> > actually I've debugged web2py and figure it out for myself. There are two
> > easy ways to fix it (I've tried to add them to the book, but my account
> > doesn't allow me to edit it)
> >
> > 1) set username=False in auth.define_tables()
> > 2) add  email = user['username']+"@facebook.com" in the return of def
> > get_user
> >
> > On Mon, Jun 6, 2011 at 10:02 PM, Michele Comitini <
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > michele.comit...@gmail.com> wrote:
> > > Hi Sebastian,
> >
> > > copy from this example:
> >
> > >http://code.google.com/r/michelecomitini-facebookaccess/source/browse.
> ..
> >
> > > <
> http://code.google.com/r/michelecomitini-facebookaccess/source/browse..
> .>and
> > > let me know
> >
> > > mic
> >
> > > 2011/6/6 Sebastian E. Ovide <sebastian.ov...@gmail.com>
> >
> > > Hi All,
> >
> > >> just wondering if the section "OAuth2.0 and Facebook" of the book is
> up to
> > >> date?
> >
> > >> I following it's instructions but I'm getting an "Internal error"
> >
> > >> to reproduce
> >
> > >> 1) get last web2py 1.196.3
> > >> 2) follow the instructions from the book
> > >> 2.a) get facebook and place it in modules
> > >> 2.b) copy the code from the book
> > >> 2.c) replace "from facebook import GraphAPI" with "facebook =
> > >> local_import('facebook')"
> > >> 2.d) replace facebook. to GraphAPIError and GraphAPI
> > >> 2.e) replace YOUR_CLIENT_ID and YOUR_CLIENT_SECRET with real data
> > >> 3) set your app URL tohttp://localhost:8000/welcome/
> >
> > >> Is something missing ?
> >
> > >> When I click login, it redirect me to facebook, where I can login, and
> > >> then it redirects me tohttp://localhost:8000/welcome/
> >
> > >> At that point I get an error:
> >
> > >>  TRACEBACK
> >
> > >> 1.
> > >> 2.
> > >> 3.
> > >> 4.
> > >> 5.
> > >> 6.
> > >> 7.
> > >> 8.
> > >> 9.
> > >> 10.
> > >> 11.
> > >> 12.
> > >> 13.
> > >> 14.
> > >> 15.
> > >> 16.
> >
> > >> Traceback (most recent call last):
> >
> > >>   File "/home/sebas/Downloads/web2py/gluon/restricted.py", line 184,
> in restricted
> >
> > >>     exec ccode in environment
> >
> > >>   File
> "/home/sebas/Downloads/web2py/applications/welcome/controllers/default.py" <
> http://localhost:8000/admin/default/edit/welcome/controllers/default.py>,
> line 71, in <module>
> >
> > >>   File "/home/sebas/Downloads/web2py/gluon/globals.py", line 137, in
> <lambda>
> >
> > >>   /  self._caller = lambda f: f()
> >
> > >>   File
> "/home/sebas/Downloads/web2py/applications/welcome/controllers/default.py" <
> http://localhost:8000/admin/default/edit/welcome/controllers/default.py>,
> line 33, in user
> >
> > >>     return dict(form=auth())
> >
> > >>   File "/home/sebas/Downloads/web2py/gluon/tools.py", line 1070, in
> __call__
> >
> > >>     return getattr(self,args[0])()
> >
> > >>   File "/home/sebas/Downloads/web2py/gluon/tools.py", line 1626, in
> login
> >
> > >>     user =
> self.get_or_create_user(table_user._filter_fields(cas_user))
> >
> > >>   File "/home/sebas/Downloads/web2py/gluon/tools.py", line 1360, in
> get_or_create_user
> >
> > >>     user = self.db(table_user[username] ==
> keys[username]).select().first()
> >
> > >> KeyError: 'email'
> >
> > >> any ideas , thanks
> >
> > >> --
> > >> Sebastian E. Ovide
> >
> > --
> > Sebastian E. Ovide
>



-- 
Sebastian E. Ovide

Reply via email to