On May 16, 3:00 am, Sid Bachtiar <sid.bacht...@gmail.com> wrote:
> URL is in Symfony format, e.g.: 'module/action?param=value'
>
> Don't set the following app.yml sfGuard's setttings:
>
> all:
>   sf_guard_plugin:
>     success_signin_url:     �...@my_route?param=value # the plugin use
> the referer as default

Okay, I commented out the success_signin_url:

#  sf_guard_plugin:
#    success_signin_url:      homepage

I also removed my custom code for sfGuardAuth. I then ran:

php symfony cc

The I put a die statement in BasesfGuardAuthActions, just to be sure
that the code was now back to using the default base class:

die("hi");

I could see this being triggered, so I took it out. So now I have the
default code which comes with the sfGuard plugin, which looks like
this:

    $user = $this->getUser();
    if ($user->isAuthenticated())
    {
      return $this->redirect('@homepage');
    }

    $class = sfConfig::get('app_sf_guard_plugin_signin_form',
'sfGuardFormSignin');
    $this->form = new $class();

    if ($request->isMethod('post'))
    {
      $this->form->bind($request->getParameter('signin'));
      if ($this->form->isValid())
      {
        $values = $this->form->getValues();
        $this->getUser()->signin($values['user'], array_key_exists
('remember', $values) ? $values['remember'] : false);

        // always redirect to a URL set in app.yml
        // or to the referer
        // or to the homepage
        $signinUrl = sfConfig::get
('app_sf_guard_plugin_success_signin_url', $user->getReferer
('@homepage'));

        return $this->redirect($signinUrl);
      }
    }


And now, when I try to log in, I again get this error:

"Redirect Loop
Firefox has detected that the server is redirecting the request for
this address in a way that will never complete."


Seems like I either redirect to the home page, or I end up in an
infinite loop of redirection. Surely there is a way around this?







> On Sat, May 16, 2009 at 6:46 PM, nick <lal...@teamlalala.com> wrote:
>
> > On May 16, 12:59 am, Sid Bachtiar <sid.bacht...@gmail.com> wrote:
> >> Use
>
> >> $this->getUser()->setAttribute('referer', 'URL to come back to');
>
> >> sfGuard upon successful login should try to take you there.
>
> > Sad to say, that didn't work. My code now looks like this:
>
> > if ($request->getParameter('redirect'))
> > {
> >  $arrayOfUrlParts = explode('/', $request->getParameter('redirect'));
> >  $model = $arrayOfUrlParts[0];
> >  $action = $arrayOfUrlParts[1];
> >  $queryString = '';
> >  for ($i=2; $i < count($arrayOfUrlParts); $i++)
> >  {
> >    if ($i % 2 == 0 ) $queryString .= $arrayOfUrlParts[$i] . '=';
> >    if ($i % 2 != 0 ) $queryString .= $arrayOfUrlParts[$i] . '&';
> >  }
> >  $this->getUser()->setAttribute('referer', $model.'/'.$action.'?'.
> > $queryString);
> > }
> > $signinUrl = sfConfig::get('app_sf_guard_plugin_success_signin_url',
> > $user->getReferer('@homepage'));
> > return $this->redirect($signinUrl);
>
> > Just as before, when I log in, I'm sent back to the home page, rather
> > than being sent forward to the page that I was trying to go to. But if
> > I echo  $model.'/'.$action.'?'.$queryString to the screen I can see
> > that I have the right URL. But it is only the right URL the first time
> > this code runs through (that is, when I submit the login form).
> > Symfony then reloads the signin() method a second time, and at that
> > point the page I'm coming from is the login page.
>
> > I'm assuming this is a task that a lot of Symfony developers have
> > implemented on their own sites. Could someone please post some sample
> > code?
>
> >> On Sat, May 16, 2009 at 4:53 PM, nick <lal...@teamlalala.com> wrote:
>
> >> > Clearly, I'm going about this all wrong. If anyone else out there who
> >> > has done this wants to chime in, I'd be grateful.
>
> >> > Out of desperation, I tried the straightforward approach, which I know
> >> > is a big hack:
>
> >> >  $arrayOfUrlParts = explode('/', $request->getParameter('redirect'));
> >> >  $model = $arrayOfUrlParts[0];
> >> >  $action = $arrayOfUrlParts[1];
> >> >  $queryString = '';
> >> >  for ($i=2; $i < count($arrayOfUrlParts); $i++)
> >> >  {
> >> >    if ($i % 2 == 0 ) $queryString .= $arrayOfUrlParts[$i] . '=';
> >> >    if ($i % 2 != 0 ) $queryString .= $arrayOfUrlParts[$i] . '&';
> >> >  }
> >> >  return $this->redirect($model.'/'.$action.'?'.$queryString);
>
> >> > If I simply echo this last bit to the screen, I can see that I'm
> >> > getting exactly what I need as an URL:
>
> >> > frontend_dev.php/sfZed/zed/model/inventory/id/5
>
> >> > But I again get an infinite loop of redirection:
>
> >> > "Redirect Loop
> >> > Firefox has detected that the server is redirecting the request for
> >> > this address in a way that will never complete."
>
> >> > So clearly, this adjustment is suppose to be made somewhere else in
> >> > the code. I'm not suppose to be working in sfGuardAuth - executeSignin
> >> > (). But where else do I make this adjustment?
>
> >> > On May 15, 11:16 pm, nick <lal...@teamlalala.com> wrote:
> >> >> Interesting. I feel like I'm getting closer. Instead of getUri() I
> >> >> switched to using getPathInfo() in the form:
>
> >> >> <form action="<?php echo url_for('@sf_guard_signin') ?>"
> >> >> method="post">
> >> >>   <table>
> >> >>     <?php echo $form ?>
> >> >>   </table>
> >> >>   <input type="submit" value="sign in" />
> >> >>   <input type="hidden" name="redirect" value="<?php echo substr
> >> >> ($sf_request->getPathInfo(), 1) ?>" />
> >> >> </form>
>
> >> >> I had to use substr() to remove the first "/" forward slash, otherwise
> >> >> the address was treated as absolute from the document root. I then
> >> >> changed actions.class.php like this:
>
> >> >> $this->finalRedirectInForm = $request->getParameter('redirect');
> >> >> return $this->redirect($this->finalRedirectInForm);
>
> >> >> This allowed me to escape the problem that I'd been having before -
> >> >> the problem of falling into an infinite loop of redirection. Now if I
> >> >> try to go here:
>
> >> >> frontend_dev.php/sfStar/starit/model/BailiwickQuestion/id/55
>
> >> >> I'm first redirected to the login screen, and then when that submits,
> >> >> I'm redirected here:
>
> >> >> frontend_dev.php/sfStar/starit
>
> >> >> I've now lost this part of the URL:
>
> >> >> model/BailiwickQuestion/id/55
>
> >> >> So I end up with a fatal error: method called on a non-object.
>
> >> >> Any thoughts?
>
> >> >> I can not believe how hard this is. Seems like this is a fairly common
> >> >> thing, that most Symfony developers probably do on most sites.
>
> >> >> On May 15, 10:15 pm, nick <lal...@teamlalala.com> wrote:
>
> >> >> > On May 15, 2:48 pm, "David Ashwood" <da...@inspiredthinking.co.uk>
> >> >> > wrote:
>
> >> >> > > Aye - so looking at the code you need to pass the referring URL to 
> >> >> > > the form
> >> >> > > from executeSignin.
> >> >> > > In the form them append the referrer to the post request with 
> >> >> > > something like
> >> >> > > "&referrer=url".
> >> >> > > Then in the isValid codeblock - pull out the param and use it in 
> >> >> > > your
> >> >> > > redirect.
>
> >> >> > Are you suggesting (at the end of the process) handing the entire
> >> >> > urldecoded() url to $this->redirect()?
>
> >> --
> >> Blue Horn Ltd - System Developmenthttp://bluehorn.co.nz
>
> --
> Blue Horn Ltd - System Developmenthttp://bluehorn.co.nz
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to