Jump to content

Redirect home after logout


modifiedcontent
 Share

Recommended Posts

You can hook before ProcessLogin::executeLogout and set the desired url.

<?php

wire()->addHookBefore("ProcessLogin::executeLogout", null, "setRedirect");

function setRedirect(HookEvent $event) {
	$event->object->setLogoutURL($pages->get('/')->httpUrl);
}

 

 

  • Like 4
Link to comment
Share on other sites

Thanks BitPoet.

I get server errors when I put this in ready.php.  - should it go there or could you also put it in a functions.php file within the templates folder? This is the error I get on logout:

Error: Uncaught Error: Call to a member function get() on null in /var/www/html/site/ready.php:6
Stack trace:
#0 /var/www/html/wire/core/WireHooks.php(777): setRedirect(Object(ProcessWire\HookEvent))
#1 /var/www/html/wire/core/Wire.php(402): ProcessWire\WireHooks->runHooks(Object(ProcessWire\ProcessLogin), 'executeLogout', Array)
#2 /var/www/html/wire/core/ProcessController.php(244): ProcessWire\Wire->__call('executeLogout', Array)
#3 /var/www/html/wire/core/Wire.php(374): ProcessWire\ProcessController->___execute()
#4 /var/www/html/wire/core/WireHooks.php(698): ProcessWire\Wire->_callMethod('___execute', Array)
#5 /var/www/html/wire/core/Wire.php(402): ProcessWire\WireHooks->runHooks(Object(ProcessWire\ProcessController), 'execute', Array)
#6 /var/www/html/wire/core/admin.php(113): ProcessWire\Wire->__call('execute', Array)
#7 /var/www/html/wire/modules/AdminTheme/AdminThemeReno/controller.php(13): require('/var/www/html/w...')
#8 /var/www/html/site/templates/admin.php(15): require('/ (line 6 of /var/www/html/site/ready.php) 

This error message was shown because: you are logged in as a Superuser. Error has been logged.

This version produces no errors, but doesn't do anything either:

wire()->addHookBefore("ProcessLogin::executeLogout", null, "setRedirect");

function setRedirect(HookEvent $event) {
	$event->object->setLogoutURL('/');
}

Probably unrelated, but does it make any difference if you do wire()->... or wire->... ?

Why is redirect to homepage not default behavior anyway?! The login form in the admin area is the last place you want to be when you log out. Wordpress has the same annoying illogical default behavior. Is there some obscure reason why it makes sense?

Link to comment
Share on other sites

This should work:

    wire()->addHookBefore("ProcessLogin::executeLogout", null, "setRedirect");

    function setRedirect(HookEvent $event) {
        $event->object->setLogoutURL(wire('pages')->get('/')->httpUrl);
    }

 

  • Like 2
Link to comment
Share on other sites

Thanks adrian !

Yes, that does seem to work.

I have seen another hooked function like this:

$wire->addHookAfter ...

Is wire() and $wire and wire-> etc. all the same? What's what? I guess I'll have to study up on that...

And would this work within the templates folder, in a functions.php or something like that? I'll have to try that...  The ready.php file is awkward.

Link to comment
Share on other sites

adrian's solution works well, but causes an internal server error on one page that loads an external script:

2017-04-02 07:06:03	guest	http://mysite.com/http404/	Error: 	Cannot redeclare setRedirect() (previously declared in /var/www/html/site/assets/cache/FileCompiler/site/ready.php:5) (line 5 of /var/www/html/site/assets/cache/FileCompiler/site/ready.php)

Renaming the function did not fix it. Don't have time to dig into this right now. Leaving this note here and will report back...

Link to comment
Share on other sites

  • 5 months later...
On 27/03/2017 at 5:25 PM, BitPoet said:

You can hook before ProcessLogin::executeLogout and set the desired url.


<?php

wire()->addHookBefore("ProcessLogin::executeLogout", null, "setRedirect");

function setRedirect(HookEvent $event) {
	$event->object->setLogoutURL($pages->get('/')->httpUrl);
}

 

Works well if you change null for $this. Was erroring before.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...