Excerpts from Dobrysmak's message of Wed Sep 08 11:57:47 -0300 2010:
> Hi!
> I'm pretty new to pylons framework and repoze.what repoze.who plugins,
> so i have few questions.
> I've searched the web but no results.
> 
I'm making my way with repoze what/who too so please take my advice with
a grain of salt. 
> First of all, i've got a login form for users.
> My configuration for repoze.what looks like this
> 
> return setup_sql_auth(
>         app,
>         User,
>         Groups,
>         Permissions,
>         meta.Session,
>         login_url='/login/index',
>         post_login_url='/main/cpanel',
>         post_logout_url='/login/index',
>         login_handler='/login/login',
>         logout_handler='/login/logout',
>         cookie_secret=config['cookie_secret'],
>         cookie_timeout=600,
>         cookie_reissue_time=500,
>         translations={
>             'validate_password' : 'check_pass',
>             'user_name': 'login',
>             'group_name': 'name',
>             'permission_name': 'name'
>         })
> 
> When a users is loggin in, the application should update the
> "last_visit_date" column in db, this action is placed in "/login/
> login", but at the process of user login this action is ignored.
> That's the first question, why and how to fix this?

You could write a metadata provider. Although its purpose is to add some
extra information on the identity dictionary once the user has been
validated, I guess you can use it to update your session table with some
extra data. Since it's the last step in the authentication process and
it's only called with the final "best" identity found, you can be sure
it will be called in the right time.

I don't know anything about quickstart but according to docs, the
defined metada provider plugin in quickstart would be
SQLAlchemyUserMDPlugin [1]. I'm sure you could extend it with some extra
functionality, making sure you call the inherited plugin first and then
roll your own code. For example,

from repoze.who.plugins.sa import SQLAlchemyUserMDPlugin 

class myMDplugin(SQLAlchemyUserMDPlugin):

       implements(IMetadataProvider)  

       def add_metadata(self, environ, identity):
            super(myMDplugin, self).add_metadata(environ, identity)
            ... update your table here ...

More about writing a metadataprovider can be found here[2].

You can then configure repoze to use your own md provider passing the
plugin name as a kwargs argument as explained here [3]

> 
> The second part is the Error handling in repoze.what/who.
> When user puts the wrong pass/name it rise an Exception 401 (that's
> ok) and displays it in a standard pylons debuge mode, but where can i
> customize it to show restricted access messages?
If you're protecting your controllers classes/method with the provided
decorators for pylons (ControllerProtector, ActionProtector) it should
redirect you to a page with the error message. 
If you're not or you want to customize the way it works and looks, you
need to write your own denial handler. Find here [4] an example for you
to customize.

Hope I made some sense. I'm pretty sure there are easier ways to make
things work, though :) 

Mariano

[1] 
http://code.gustavonarea.net/repoze.who.plugins.sa/index.html#repoze.who.plugins.sa.SQLAlchemyUserMDPlugin
[2] http://docs.repoze.org/who/1.0/narr.html#writing-a-metadata-provider-plugin
[3] http://what.repoze.org/docs/plugins/quickstart/#how-to-set-it-up
[4] 
http://code.gustavonarea.net/repoze.what-pylons/Manual/Protecting.html#using-denial-handlers

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to