Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Executing a class method from the URL (for logout method)


Go to End
Reply

13 Posts   2299 Views

Avatar
Xurk

16 June 2010 at 10:33pm (Last edited: 16 June 2010 10:34pm), Community Member, 50 Posts

I've been searching for a solution for a while on the forums and on Google, but haven't managed to find one. There are some threads on the forums which cover a custom "logout" method for a logged in Security Group member, but the responses given there unfortunately don't help either.

My problem is that I have created a Security Group named "Professionals" and have the logging in part functioning. After logging in, I want to provide them with a "Log out" link which is visible on every page of the website. I looked at the Forum module (and the ForumMemberProfile class to be specific) to see how it is done there, as the module also supplies a "Log out" hyperlink.
This hyperlink points towards "ForumMemberProfile/logout".

In an attempt to mimic this functionality, I set my hyperlink to "Professionals/logout", but when it is clicked on, I receive a "Page not found" error. This seems pretty logical as the page doesn't exist, but I can't seem to figure out how Forum does this? I noticed that the class has the $URLSegment variable set to "ForumMemberProfile" and tried that with my class, but that also doesn't do the trick.

Another thread on the Forums suggested putting a "logout" method in the Page_Controller class and then a hyperlink in the template pointing to "home/logout" (the same principle). So I moved my method into the Page_Controller class in Page.php and changed my hyperlink to "{$BaseHref}logout". But this also gives me a "Page not found" error.

Can anyone explain to me how exactly calling classes and their functions from the page URL works? Any help would be greatly appreciated :)

Avatar
swaiba

17 June 2010 at 12:31am Forum Moderator, 1796 Posts

Hi,

I am not sure I follow... can you not just link to... www.yoursite.com/Security/Logout?

Barry

Avatar
Xurk

17 June 2010 at 12:58am Community Member, 50 Posts

Hi Barry,

Thanks for your reply. I've just tried "Security/Logout" and this does indeed do the trick :) Thanks for the tip!

One issue I still have though: it appears that this uses "Director::redirectBack()" after clearing the session variables. While this isn't that bad, I'd rather redirect the user to the log-in form after successfully being logged out - which is what I have in my custom "logout()" method.

My belief that this should be possible is fueled by how the "Forum" module does things and by [url=http://www.silverstripe.org/general-questions/show/275716?start=0#post275766]this post by Willr[/url]. So while the "Security/logout" solution is fine for now, if anyone has any further advice, I'd love to hear it :)

Avatar
Willr

17 June 2010 at 5:18pm Forum Moderator, 5511 Posts

You can do this, I think I mixed up logout (since its not a static) try something like

//mysite/code/Page.php -> Page_Controller

function logout() {
      if($member = Member::currentUser()) {
         $member->logOut();   
            return Director::redirect('something');
      }
}

Then your logout url like site.com/home/logout/

Avatar
Xurk

17 June 2010 at 7:05pm Community Member, 50 Posts

Thanks for the code snippet, Willr. Funny, that's almost exactly the same code as I already had in my Page_Controller:

function logout() {
         if ($oProfessional = Member::currentUser()) {
            $oProfessional->logOut();
         }

         return Director::redirect("netwerk/inloggen/");
      }


Though for some reason, navigating to "home/logout" just provides me with the "Page not found" template :(

Avatar
Willr

17 June 2010 at 7:08pm Forum Moderator, 5511 Posts

You may have to add 'logout' as an allowed action.

In your page controller you need an array like

static $allowed_actions = array(
'logout'
);

If that array already exists just add 'logout' to it.

Avatar
Xurk

17 June 2010 at 7:41pm Community Member, 50 Posts

Bingo! That one hit the jackpot - thanks a million :)

As always, it turns out to be something glaringly obvious, once you find out that it exists...!

Avatar
cuSSter

18 August 2010 at 8:20am Community Member, 56 Posts

Hi!

I'm trying to do the same thing, but instead of adding extra code to the Page_Controller, I used a decorator class.
But whenever I click on the logout link, I get a page-not-found error. What did I miss?

Go to Top