Hi,
I don't know if this issue is already settled, but I too had problems
using the login widget.
After reading the related postings, I came up with a rather simple and
elegant solution (which is a variant of one of those posted here)
which works for me.
Here is an almost self-contained example:
(defun init-user-session (comp)
(with-flow comp
(yield (login-page comp))
(yield (make-main-page))))
(defwidget login-maybe (login)
()
(:documentation "Render login form only if not logged in."))
(defmethod render-widget-body ((self login-maybe) &key &allow-other-
keys)
(if (authenticatedp)
(answer self)
(call-next-method)))
(defun login-page (k)
(make-instance
'composite
:widgets
(list (make-instance
'login-maybe
:on-login
(lambda (login-widget credentials-obj)
(with-slots (email password) credentials-obj
(if (check-credentials email password)
credentials-obj
(values nil "Wrong password. Try again."))))))))
The crucial thing seems to be to wrap the maybe-login widget into a
composite widget, without that it doesn't work.
- Paul
On 11 Mrz., 10:44, Robin Lee Powell <[email protected]>
wrote:
> On Wed, Mar 04, 2009 at 06:45:48PM -0800, Benjamin Collins wrote:
>
> > On Mar 4, 8:01 pm, Robin Lee Powell <[email protected]>
> > wrote:
> > > Can you post a tarball of the whole thing somewhere?
>
> > Sure:http://github.com/aggieben/simple-blog/tarball/broken-maybe-login
>
> Sorry, got busy.
>
> It definitely wasn't working, and as far as I can tell, you hadn't
> failed to use it in any way.
>
> In fact, I have no idea *how* it was working. My best guess is that
> the login widget it inherits from would re-render no matter what
> happened in :on-login.
>
> I had a version in my tree that I hadn't put in the tutorial that
> would expect the child widget to always be a zero-arg lambda, and
> run that exactly once; it makes stuff nicer down the road.
>
> Moving the logic for that into check-login gives this patch against
> your tarball, which seems to work, and is The Right Thing anyway.
>
> Thanks for giving me chance to clean this up outside of my own work;
> I'll go put this new stuff in the tutorial too.
>
> An earlier version simply set dirty in check-login; watching
> weblocks freakout was funny, and also very happy-making: style and
> error checking *GOOD*:
>
> [2009-03-11 01:30:10 [WARNING]] During the rendering phase, 1 widgets were
> marked dirty, which should typically be done only during action handling
> [2009-03-11 01:30:10 [WARNING]] Warning while processing connection: During
> the rendering phase, 1 widgets were marked dirty, which should typically be
> done only during action handling
>
> -Robin
>
> --
> They say: "The first AIs will be built by the military as weapons."
> And I'm thinking: "Does it even occur to you to try for something
> other than the default outcome?"
> --http://shorl.com/tydruhedufogrehttp://www.digitalkingdom.org/~rlpowell/***http://www.lojban.org/
>
> login_diffs.txt
> 2KAnzeigenHerunterladen
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"weblocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/weblocks?hl=en
-~----------~----~----~----~------~----~------~--~---