Custom login form with z3c.form

Does somebody know a example/tutoria, or can help me.
I try to make an individual LoginForm, with z3c.form, but my new membrane user doesn't stay logged in after login ("__ac"-Cookie is set)...

This is my action

@button.buttonAndHandler(
    _(u'label_login', default=u'Login'), name='login'
)
def action_join(self, action):
    data, errors = self.extractData()
    if errors:
        self.status = self.formErrorsMessage
        return
    # Spoof HTTP request login fields
    membership_tool = getToolByName(self.context, 'portal_membership')
    print data
    login = data.get('__ac_name', None)
    password = data.get('__ac_password', None)
    portal = api.portal.get()
    request = portal.REQUEST
    membership_tool.loginUser(request)
    # print 'user {}'.format(user)
    # print self.context.REQUEST
    self.status = 'success'

Login via the "login_form" works.

Hope somebody can give me a hint

This is how it works:

@button.buttonAndHandler(
    _(u'label_login', default=u'Login'), name='login'
)
def action_join(self, action):
    """
    not in use because of ->
    https://community.plone.org/t/membrane-user-and-custom-login-form/4177
    """
    data, errors = self.extractData()
    if errors:
        self.status = self.formErrorsMessage
        return
    aclu = api.portal.get_tool('acl_users')
    login = data.get('__ac_name', None)  # username
    portal = api.portal.get()
    request = portal.REQUEST
    user = aclu._findUser(aclu.plugins, login)
    accessed, container, name, value = aclu._getObjectContext(
        request['PUBLISHED'],
        request
    )
    user = aclu._authorizeUser(
        user,
        accessed,
        container,
        name,
        value,
        _noroles
    )
    mt = api.portal.get_tool('portal_membership')
    mt.loginUser(request)
    self.status = 'success'

_authorizeUser() is important :slight_smile:

Code copied from https://github.com/collective/pas.plugins.authomatic/blob/master/src/pas/plugins/authomatic/plugin.py#L111

Thanks @jensens

1 Like