I'm having problems setting member properties from a PAS plugin. I'm looking for feedback on my approach to solving this use case, and help on resolving the problem.

The use case

Implement simple password expiry in Plone. There are other solutions but
those I've looked at so far have had to override many of the standard
plone_login templates thus making the implementation future-brittle.

Potential Solution

Use an IUpdateCredentialPlugin so that when a member logs the password age is examined.

If it is now expired then set the standard property must_change_password
to True.

After which Plone's regular must_change_password mechanism in plone_login skins takes over.

I suppose one of the downsides is that this means that it will be
examined on each user REQUEST? This could be optimized away I suppose somehow...

Major Roadblock

When I update member properties from an updateCredentials() method
they revert back by the time the REQUEST is finished.

Here's an example updateCredentials() method that sets the e-mail:

    def updateCredentials(self, request, response, login, new_password):
        mtool = getToolByName(self, 'portal_membership', None)
        if not mtool:
        member = mtool.getMemberById(login)
        if not member:
        member.setMemberProperties(dict(email="[EMAIL PROTECTED]"))
        logger.debug("changed members email")
        assert member.getProperty('email') == '[EMAIL PROTECTED]'

And a doctest which fails:

      >>> browser.getLink('Log in').click()
      >>> browser.getControl(name='__ac_name').value = PTC.default_user
>>> browser.getControl(name='__ac_password').value = PTC.default_password
      >>> browser.getControl(name='submit').click()

      This next one fails but should succeed....
      >>> member.getProperty('email')

By looking into the logs I can see that indeed the handler is getting called
and the assertion succeeds. Somewhere along the line the property changes are

I'm looking for feedback to know if I'm on the right track or if there is a better approach I should looking at. If the approach is ok, I would appreciate some tips of tracking down the bug (PAS, PlonePAS?).


-jordan (hexsprite)

Zope-PAS mailing list

Reply via email to