> Hi,
>
> Are there any login/logout/redirect templates for z3c.pagelet?
>
> I could reuse the templates from zope.app.authentication, but they
> obviously
> contain some macros that need some registrations I don't have, such as
> @@standard_macros. And my layout template does not contain any macro.
> Maybe there is some package with a layer that does this job?
> How are you doing?

I simply created a simple z3c.form based form that looks like this:

class LoginPage(ActionForm):
    """ Login logic and page """

    template = ViewPageTemplateFile('pt/login.pt')
    fields = form.field.Fields(IFYMUser).select('login', 'password')
    prefix = "login_data"
    unsuccessfulLogin = False

    def __call__(self):
        request = self.request
        if (not IUnauthenticatedPrincipal.providedBy(request.principal)
            and 'login_data.widgets.login' in request):
            # Login succeeded!
            camefrom = request.get('camefrom', '.')
            request.response.redirect(camefrom)
        else:
            if 'login_data.widgets.login' in request:
                # Something went wrong with the authentication
                self.unsuccessfulLogin = True
            return super(LoginPage, self).__call__()

    @form.button.buttonAndHandler(_('Anmelden'), name='login')
    def handleLogin(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        if self.unsuccessfulLogin:
             raise ActionExecutionError(Invalid(
                _(u"Ung├╝ltige Login/Passwort-Kombination!")))

    @form.button.buttonAndHandler(_(u'Abbrechen'), name='abbrechen')
    def handle_abbrechen(self, action):
        self.request.response.redirect('index.html')

class LogoutPage(BrowserPagelet):
    """ Logout logic and page """

    template = ViewPageTemplateFile('pt/logout.pt')

    def update(self, nextURL=None):
        if not IUnauthenticatedPrincipal.providedBy(self.request.principal):
            auth = getUtility(IAuthentication)
            ILogout(auth).logout(self.request)
            site_path = absoluteURL(getSite(), self.request)
            return self.request.response.redirect(site_path + '/logout.html')

My templates looks like this:

--------- login ------------

<h2 i18n:translate=""> Anmelden </h2>

<p/>

<span tal:replace="structure view/errorstatus" />

<input tal:replace="structure view/widgets/login/snippets/div" />
<input tal:replace="structure view/widgets/password/snippets/div" />

<div class="buttons">
 <input tal:repeat="action view/actions/values"
        tal:replace="structure action/render"
        />
</div>

------------ logout ------------

<h2 i18n:translate="">Abmelden</h2>

<p i18n:translate="">
Sie sind nun vom System abgemeldet.
</p>

Moreover, I have a link in my menu that points to the login/logout page,
(only logout if logged in and reverse).

However, I still have the problem that I don't know how to make Zope3
point to my login page in case unauthorized content is requested. Zope3
displays some "Unauthorized - a sever error has occured" page I don't know
where it comes from.

Best Regards,
Hermann

P.S.: Ah yes, the "ActionForm" is a simple form inheriting from form.Form
that ignores the context. And the input fields in the template rely on my
z3c.formsnippets package, which you can easily replace with your TAL code.

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to