Hmm, I gave that a spin and don't believe I can get that to work.

All of the login_methods imply either using the local login form or a
3rd party URL to login. This will not work here - what I need is a way
of authenticating based on a URL, sent through an email:
http://127.0.0.1/default/login_by_token/[random string of numbers]

If I write a login_method:

import urllib
import urllib2
import base64


def token_auth(server="http://127.0.0.1";):
    """
    to use basic login with a different server
    from gluon.contrib.login_methods.token_auth import token_auth
    auth.settings.login_methods.append(token_auth())
    """

    def basic_token_auth(username, password):
        return False
    return basic_token_auth


I don't have access to the URL/request at all, and thus can't validate
it.

Furthermore, this authentication still expects a username/password
combo, which I wouldn't be providing.


On Sep 23, 8:45 am, mdipierro <[email protected]> wrote:
> You should not need to rewrite tools.py code. Looks at the examples in
> gluon/contrib/login_methods
> You can extend it.
>
> On Sep 23, 12:20 am, Chris <[email protected]> wrote:
>
>
>
> > I did some more digging and found that the current code in gluon.tools
> > stores login info in session.auth:
>
> >                 session.auth = Storage(
> >                     user = user,
> >                     last_visit = request.now,
> >                     expiration = self.settings.long_expiration,
> >                     remember = True,
> >                 )
>
> >http://www.web2py.com/examples/static/epydoc/web2py.gluon.tools-pysrc...
>
> > It'd probably be best to not rewrite this code elsewhere, so my
> > current feeling is that the method with the most reuse is to:
>
> > 1) Pull out the session.auth code from gluon.tools.Auth.login_bare
> > into its own method (based on the db user object)
> > 2) Call this new method, login_as(self, user), from my code.
>
> > I'm not fully comfortable messing around with everyone's internals,
> > but I can send you a diff and you can be the arbiter.
>
> > Thanks,
> > Chris
>
> > On Sep 23, 12:40 am, mdipierro <[email protected]> wrote:
>
> > > the survey app predates auth. It would be really nice to have a gluon/
> > > contrib/login_method based on it.
>
> > > On Sep 22, 11:05 pm, Chris <[email protected]> wrote:
>
> > > > Interesting, thanks Massimo!
>
> > > > I took a look at the survey link. It send a link that lets me access
> > > > part of the site, but 1) I'm not sure if it's actually logging in the
> > > > user (i.e. changing auth.user) and 2) I don't have access to the code
> > > > for it, so I don't know how to imitate its technique.
>
> > > > I looked at the CAS stuff but I'm not sure I'm making the right use of
> > > > it. I think session.token is the key, but this line:
>
> > > > id,email,name=session.token ### specific for web2py CAS service
>
> > > > led me to think that login would be different for my non-CAS system. I
> > > > hooked up a debugger so I could see what happens to session.token for
> > > > a logged in user and got None. So apparently my regular login isn't
> > > > even using session.token, so I can't log a user in by creating a
> > > > controller action that sets session.token.
>
> > > > I'm gonna keep hammering away at this, let me know if you have more
> > > > ideas!
>
> > > > Thanks!
> > > > Chris
>
> > > > On Sep 22, 10:01 pm, mdipierro <[email protected]> wrote:
>
> > > > >http://web2py.com/surveyhttp://web2py.com/cas
>
> > > > > On Sep 22, 2:45 pm, Chris <[email protected]> wrote:
>
> > > > > > Hi all,
>
> > > > > > I'd like to create a system where I can email an individual user a
> > > > > > link that, when they click on it, automatically logs them in and 
> > > > > > takes
> > > > > > them to the requested page. I didn't see a method of logging in a 
> > > > > > user
> > > > > > in this manner; can anyone offer any suggestions?
>
> > > > > > Thanks,
> > > > > > Chris

Reply via email to