Well, I have something working that's a little different. The S.referer
doesn't seem to be what I want. Let me explain:
I have an index page with a table of items. Each item has an "Edit" link on
it. The page that the edit link points at has a Loc.If test on it:
val loginTest = Loc.If(() => User.loggedIn_?, RedirectResponse("/login"))
In the login method, if I use S.referer, I get the index page, while S.uri
is the current (login) page. The original edit page URI is lost with the
redirect, so what I've done is added a session var
object origUri extends SessionVar[Can[String]](Empty)
and modified the If to "capture" the original request at the time that it's
made
val loginTest = Loc.If({() => origUri(Full(S.uri + S.servletRequest.map("?"
+ _.getQueryString).openOr(""))); User.loggedIn_?,
RedirectResponse("/login"))
This looks really kludgey to me, but it does work. I would welcome any
suggestions to make this cleaner.
Derek
On Tue, Oct 21, 2008 at 3:08 PM, David Pollak <[EMAIL PROTECTED]
> wrote:
> object Login {
> def login() = {
> val from = S.referer.openOr("/")
>
> User.currentUser match {
> case Full(_) => // do nothing
> case _ =>
> def testPwd(user: User, pwd: String): Can[Boolean] =
> if (user.password.match_?(pwd)) {
> if (user.invalid_?) Failure(user.invalidReason, Empty, Nil)
> else {User.logUserIn(user); Full(true)}
>
> //Full(true)
> } else Failure("Password mis-match", Empty, Nil)
>
> (for (email <- S.param("username") ?~ "No Username";
> pwd <- S.param("password") ?~ "No Password";
> user <- User.find(By(User.email, email)) ?~ "User Not Found";
> success <- testPwd(user, pwd)) yield {
> user
> }) match {
> case Full(user) => S.notice("Welcome: "+user.niceName)
> if (!user.validated) {
> S.notice("Until your registration is confirmed, you cannot edit
> pages in the wiki")
> }
> case Failure(msg, _, _) => S.error(msg)
> case _ => S.error("Not logged In")
> }
> }
>
> Full(RedirectResponse(from))
> }
>
> def logout() = {
> val from = S.referer.openOr("/")
>
> User.logoutCurrentUser
> S.notice("Logged Out")
>
> Full(RedirectResponse(from))
>
> }
> }
>
>
> On Tue, Oct 21, 2008 at 2:05 PM, Derek Chen-Becker <[EMAIL PROTECTED]>wrote:
>
>> A followup question. If I want to redirect back to the original page that
>> prompted the login redirect, how would I get that? I know I can get use
>> S.uri to get everything but the query string, but do I need to dig deeper
>> into the actual HttpServletRequest to get at everything after the host
>> portion?
>>
>> Thanks,
>>
>> Derek
>>
>>
>> On Tue, Oct 21, 2008 at 2:21 PM, Derek Chen-Becker <[EMAIL PROTECTED]
>> > wrote:
>>
>>> OK, that makes sense. Sometimes when you have a hammer everything looks
>>> like a nail :)
>>>
>>>
>>> On Tue, Oct 21, 2008 at 2:05 PM, David Pollak <
>>> [EMAIL PROTECTED]> wrote:
>>>
>>>> SessionVars are not available during URL rewriting. URL rewriting takes
>>>> place before the session is obtained. This is deliberate because the URL
>>>> rewriting takes place before the sessionless dispatch is consulted. This
>>>> happens before the session is retrieved/created and the regular flow
>>>> happens.
>>>>
>>>> Access control on an HTML page level should be done in SiteMap.
>>>>
>>>>
>>>> On Tue, Oct 21, 2008 at 1:00 PM, Derek Chen-Becker <
>>>> [EMAIL PROTECTED]> wrote:
>>>>
>>>>> I could have sworn this had been covered recently on the list but I
>>>>> can't seem to find it. I'd like to have a rewrite function that checks to
>>>>> see if someone is logged in and in the proper role before allowing them to
>>>>> get to the page. I had wanted to do this using LiftRules.addRewriteBefore
>>>>> combined with two SessionVars that would hold the user name and their
>>>>> roles
>>>>> (if logged in). Unfortunately, it looks like SessionVars don't seem to be
>>>>> usable inside the rewrite function because the LiftSession hasn't been set
>>>>> up yet at that point. I'm I missing something obvious, or does anyone have
>>>>> some suggestions for doing it in a different/better way?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Derek
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Lift, the simply functional web framework http://liftweb.net
>>>> Collaborative Task Management http://much4.us
>>>> Follow me: http://twitter.com/dpp
>>>> Git some: http://github.com/dpp
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Collaborative Task Management http://much4.us
> Follow me: http://twitter.com/dpp
> Git some: http://github.com/dpp
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---