Finally the solution was to redefines the user_exists function from
authkit.users.sqlalchemy_04_driver.UsersFromDatabase like this:

class AppUsers(UsersFromDatabase):
    """
    Database Version
    """
    api_version = 0.4

    def user_exists(self, username):
        """
        Returns ``True`` if a user exists with the given username and
its account is validated,
         ``False`` otherwise.
        """
        try:
            user = meta.Session.query(User).filter(User.username ==
username).one()
        except:
            return False

        if user:
            if user.validated_date:
                return True
        return False

And in development.ini:

authkit.form.authenticate.user.type = app.lib.permissions:AppUsers


2008/9/7 Jordi Fernández <[EMAIL PROTECTED]>:
> The same happens with NotAuthenticatedError
>
> 2008/9/7 Gael Pasgrimaud <[EMAIL PROTECTED]>:
>>
>> Hi,
>>
>> 2008/9/7 Jordi Fernández <[EMAIL PROTECTED]>:
>>>
>>> Hi,
>>>
>>> I'm using AuthKit-0.4.1dev_r143 with Pylons 0.9.6.2 like this:
>>> http://wiki.pylonshq.com/display/pylonscookbook/AuthKit+0.4+UsersFromDatabase+with+SQLAlchemy+0.4+and+SQLAlchemyManager
>>>
>>> It works fine, but now I need to validate that an user has a validated
>>> date for login, so in lib/permissions.py I created a new permission:
>>>
>>> This is my login action:
>>>
>>>    @authorize(ActiveAuthKitUser())
>>>    def login(self):
>>>        try:
>>>            return_url = request.params['return'].encode('utf-8')
>>>        except KeyError:
>>>            return_url = '/'
>>>
>>>        redirect_to(h.url_for(return_url))
>>>
>>> And the new permission:
>>>
>>> from authkit.permissions import ValidAuthKitUser
>>> from authkit.authorize import NotAuthorizedError
>>>
>>> class ActiveAuthKitUser(ValidAuthKitUser):
>>>    """
>>>    Checks that the signed in user has its account enabled.
>>>    """
>>>    def __init__(self):
>>>        pass
>>>
>>>    def check(self, app, environ, start_response):
>>>        app = ValidAuthKitUser.check(self, app, environ, start_response)
>>>
>>>        user = meta.Session.query(User).filter(User.username ==
>>> environ['REMOTE_USER']).one()
>>>        if not user.validated_date:
>>>            raise NotAuthorizedError(
>>>                'This account is disabled.'
>>>            )
>>>        return app(environ, start_response)
>>>
>>> It works fine when I login with a valid user and with a non
>>> ValidAuthKitUser, but when I try it with an user that doesn't have
>>> validated_date raises the Exception but nothing happens, I'm
>>> redirected to the home page. Then, in next login, the action doesn't
>>> shows the login form, it's like the user was logged but not, the chek
>>> function is executed and also raises the NotAuthorizedError...
>>>
>>> What I'm doing wrong?
>>
>> I think you need to raise a NotAuthenticatedError instead of 
>> NotAuthorizedError
>>
>> --
>> Gael
>>
>>>
>>> Thanks
>>>
>>> >
>>>
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
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