[Grok-dev] login event and subscribe to

Sebastian Ware sebastian at urbantalk.se
Tue Jun 9 10:08:58 EDT 2009


I use custom login views so I don't have that problem. In the 4th line  
I set the name of the login page, which is called automatically if you  
lack authorisation:

def setup_pau(pau):
     pau['principals'] = PrincipalFolder()
     pau.authenticatorPlugins = ('principals',)

     pau['session'] = session = SessionCredentialsPlugin()
     session.loginpagename = 'login'
     pau.credentialsPlugins = ('No Challenge if Authenticated',  
'session',)


You'll need the page templates that render the form too:

class Login(grok.View):
     grok.context(MyApp)

     def update(self, login_submit=None, login=None):
         # XXX: need to display some kind of feedback when the login  
fails
         if (not  
IUnauthenticatedPrincipal.providedBy(self.request.principal)
             and login_submit is not None):
	    # I have logged in and this is
             # were the magic happens... such as...
             # self.redirect('some_destination')


class Logout(grok.View):
     grok.context(Interface)
     def render(self):
         session = getUtility(IAuthentication)['session']
         session.logout(self.request)
         self.redirect(self.application_url() + '/login')

Mvh Sebastian

9 jun 2009 kl. 15.49 skrev Jens Adner:

> After changing the code to "IAuthenticatedPrincipalCreated", no  
> results.
> This event is initiating every view too.
>
> I want write some infos to a mysql database as result of auth event:
>
> uid = principal.id.split('.')[-1]
> utils.logme("myapp","login",uid,"ip address")
>
> Currently, every browser request writes the data.
>
> Best regards
> Jens
>
> Sebastian Ware schrieb:
>> I think you could use the event [IAuthenticatedPrincipalCreated].  
>> Look
>> in [zope.app.authentication], the README.txt shares the following:
>>
>>
>> Authenticated Principal Creates Events
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> We can verify that the appropriate event was published::
>>
>>>>> [event] = getEvents(interfaces.IAuthenticatedPrincipalCreated)
>>>>> event.principal is principal
>>  True
>>>>> event.info
>>  PrincipalInfo('bob')
>>>>> event.request is request
>>  True
>>
>> The info object has the id, title, and description of the principal.
>> The info
>> object is also generated by the authenticator plugin, so the plugin  
>> may
>> itself have provided additional information on the info object::
>>
>>>>> event.info.title
>>  'Bob'
>>>>> event.info.id # does not include pau prefix
>>  'bob'
>>>>> event.info.description
>>  ''
>>
>>
>> Mvh Sebastian
>>
>> 9 jun 2009 kl. 13.50 skrev Jens Adner:
>>
>>> Hello,
>>>
>>> I've got a question about the event "IPrincipalCreated".
>>>
>>> In my app, I use this event for putting a role to a principal:
>>>
>>> @grok.subscribe(IPrincipalCreated)
>>> def update_principal_info_from_ldap(event):
>>> principal = event.principal
>>> ...
>>> prm.assignRoleToPrincipal("adminrole", principal.id)
>>>
>>> All works fine.
>>>
>>> But this event is fireing up for every grok view. I need an event  
>>> for
>>> saving some data (login time, logout time, etc.) only for the first
>>> successful auth of the user.
>>>
>>> I don't understand why the principal is creating for every view  
>>> again
>>> and again or why the event "knock on my door".
>>>
>>> Has anyone some hints? Is there another event I could use for  
>>> logging
>>> user infos at login and logout?
>>>
>>> Thanks
>>> Jens
>>>
>>>
>>>
>>> -- 
>>> ++++++++ Jens Adner IuK-Zentrum Fachhochschule Schmalkalden +++++++ 
>>> ++
>>> ++++++++ Fon: +49 3683688 9201  Fax: +49 3683688 989201     +++++++ 
>>> ++
>>> _______________________________________________
>>> Grok-dev mailing list
>>> Grok-dev at zope.org
>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>
>
> -- 
> ++++++++ Jens Adner IuK-Zentrum Fachhochschule Schmalkalden +++++++++
> ++++++++ Fon: +49 3683688 9201  Fax: +49 3683688 989201     +++++++++
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev



More information about the Grok-dev mailing list