Everything there looks kosher at first glance to me. SessionVars should stay
in the session no matter what. One thing I can think of is if somehow you're
losing the session. Is the session ID being stored in a cookie, or as part
of the URI? If it's part of the URI you may be dropping it somewhere else in
your code if you process the URI at all. That's just a guess. Also, I would
probably write the isAuthenticated method as:
def isAuthenticated_? : CurrentUserId.map(true) openOr false
Derek
On Thu, Oct 16, 2008 at 5:15 PM, Charles F. Munat <[EMAIL PROTECTED]> wrote:
>
> I've got a JPA Lift site and have set up a login in which the User's id
> is stored in a session variable thus, as shown below.
>
> This works just fine. The user can log in and go from page to page. But
> after some random number of clicks, whoops! I'm suddenly no longer
> logged in.
>
> Hmmm. I must be doing something wrong. I just love intermittent failures.
>
> (My user object is a Member.)
>
> object CurrentUserId extends SessionVar[Can[Long]](Empty)
> object RequestedURL extends SessionVar[Can[String]](Empty)
> object CurrentUser extends RequestVar[Can[Member]](Empty)
>
> object AccessControl {
>
> def login(): Can[LiftResponse] = {
> if (S.post_?) {
> try {
> val member: Member = Model.createNamedQuery[Member](
> "findMemberByEmailAddress",
> "emailAddress" ->
> S.param("emailAddress").openOr("")).getSingleResult()
>
> if (member.authenticate(S.param("password").openOr(""))) {
> CurrentUser(Full(member))
> CurrentUserId(Full(member.id))
> }
> else
> S.error("Go away!")
>
> } catch {
> case x: NoResultException =>
> S.error("This thing don't work.")
> case _ => S.error("Done broke. Ouch.")
> }
> }
>
> val uri = RequestedURL.openOr("/")
> RequestedURL(Empty)
> Full(RedirectResponse(uri))
> }
>
> def logout(): Can[LiftResponse] = {
> CurrentUser(Empty)
> CurrentUserId(Empty)
> Full(RedirectResponse(S.param("path").openOr("/")))
> }
>
> def isAuthenticated_?() : Boolean = CurrentUserId.is match {
> case Empty => false
> case Full(_) => true
> case _ => false
> }
>
> Then:
>
> Menu(Loc("forum", List("forum", "index"), "Forum", LocGroup("global"),
> If(isAuthenticated_?, "Please log in to see this page.")))
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Lift" 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/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---