mgraf
(Michael)
May 9, 2017, 2:33pm
1
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
mgraf
(Michael)
May 13, 2017, 8:41pm
2
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
Code copied from https://github.com/collective/pas.plugins.authomatic/blob/master/src/pas/plugins/authomatic/plugin.py#L111
Thanks @jensens
1 Like