I remember having quite a wrestle with all that a few months ago.  i
honestly don't remember all the details, but web2pyslices does:
http://web2pyslices.com/main/slices/take_slice/77

note that others have come up with other, potentially better, mutli-
login solutions since then - including the one that uses janrain and i
think is bundled with web2py.  moral is that it is possible to support
both traditional auth and other login methods side by side.  to see my
example running live check out www.tenthrow.com

On Oct 11, 9:05 pm, firedragon852 <firedragon...@gmail.com> wrote:
> In gluon/tools.py line 1462:
>
> cas = self.settings.login_form
> cas_user = cas.get_user()
>
> if cas_user:
>     cas_user[passfield] = None
>     user = self.get_or_create_user(cas_user)
> elif hasattr(cas,'login_form'):
>     return cas.login_form()
> else:
>     # we need to pass through login again before going on
>     next = self.url('user',args='login',vars=dict(_next=next))
>     redirect(cas.login_url(next))
>
> It seems that "next" is hardcoded to URL('user', args='login').  If I
> come from another URL such as 'facebook_login", after login I would
> still be directed to .../user/login.
>
> My workaround is to write a cookie in the controller:
>
> def facebook_login():
>   # write a cookie to indicate that the user wants to login with
> facebook
>   ...
>   redirect(URL('user', args='login'))
>
> def login():
>   ...
>   # if there is a facebook cookie, use the login_form for
> FacebookAccount
>   ...
>   return dict(form=auth.login())
>
> On Oct 12, 7:47 am, firedragon852 <firedragon...@gmail.com> wrote:
>
> > If I remove:
> > if request.args(0) == 'facebook':
>
> > from the controller method, I can get authenticated by facebook and
> > get redirected to the auth.settings.login_next URL.
>
> > It seems that this is an all-or-nothing login mechanism.  One
> > application can only support one type of authentication method.  Is
> > this correct?
>
> > On Oct 11, 8:49 pm, firedragon852 <firedragon...@gmail.com> wrote:
>
> > > Hi, I have the following code:
>
> > > def login():
> > >     ...
> > >     if request.args(0) == 'facebook':
> > >         from gluon.contrib.login_methods.oauth20_account import
> > > OAuthAccount
> > >         auth.settings.login_form = FacebookAccount(globals())
> > >     return dict(form=auth.login())
>
> > > When I go to the url .../login/facebook, I get directed to facebook's
> > > login page.  I can login successfully, but instead of going to
> > > auth.settings.login_next, I get redirected to ../login.  I think it is
> > > because auth.settings.login_next is a URL that has
> > > @auth.requires_login().
>
> > > I want to be able to support both auth and facebook logins, and with
> > > only ../login, auth.settings.login_form is not set and login will use
> > > auth.  Are there any problems with this approach?
>
> > > I am using web2py version 1.86.2.
>
>

Reply via email to