Welcome Guest, Not a member yet? Register   Sign In
Auth/myth - before filter - redirect login
#1

(This post was last modified: 08-03-2020, 08:34 AM by jreklund.)

Hi,
I seem to be getting stuck in an infinite loop trying to redirect to the myth:auth login page.  I have set up a filter, below. 

In my browser if I navigate to http://mydomain/login the login page is shown, as expected.

But if i navigate to http://mydomain/   i get caught in an infinite loop?

I do not have any routes configured for login, or anything remotely like it.

Can anyone point me in the right direction (excuse the pun)?

PHP Code:
public function before(RequestInterface $request) {    
        if(
logged_in()!=true && uri_string()!='login') {        
                return 
redirect('login');
        }
            
    
Reply
#2

(This post was last modified: 08-03-2020, 09:36 AM by InsiteFX.)

You can check like this to see if they are logged in.

PHP Code:
$authenticate Services::authentication();

// if no user is logged in then send to the login form
if ( ! $authenticate->check())
{
    session()->set('redirect_url'current_url());

    return redirect('login');


This is from a filter.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#3

(08-03-2020, 09:35 AM)InsiteFX Wrote: You can check like this to see if they are logged in.

PHP Code:
$authenticate Services::authentication();

// if no user is logged in then send to the login form
if ( ! $authenticate->check())
{
    session()->set('redirect_url'current_url());

    return redirect('login');


This is from a filter.
 Thanks InsiteFX

But something wired is happenning.

As advised I setup my filter
PHP Code:
<?php namespace Config;

use 
CodeIgniter\Config\BaseConfig;

class 
Filters extends BaseConfig
{
    
// Makes reading things below nicer,
    // and simpler to change out script that's used.
    
public $aliases = [
        
'csrf'        => \CodeIgniter\Filters\CSRF::class,
        
'toolbar'    => \CodeIgniter\Filters\DebugToolbar::class,
        
'honeypot'    => \CodeIgniter\Filters\Honeypot::class,
        
'CheckStatus'    => \CodeIgniter\Filters\CheckStatus::class,
        
    ];

    
// Always applied before every request
    
public $globals = [
        
'before' => [
        
'CheckStatus',
            
//'honeypot',
            // 'csrf',
        
],
        
'after'  => [
            
'toolbar',
            
//'honeypot'
        
],
    ]; 
then in the Filters folder I created the file CheckStatus.php with the code you suggested

PHP Code:
<?php namespace App\Filters;

use 
CodeIgniter\HTTP\RequestInterface;
use 
CodeIgniter\HTTP\ResponseInterface;
use 
CodeIgniter\Filters\FilterInterface;

class 
CheckStatus implements FilterInterface {
    
    public function 
before(RequestInterface $request) {    
        
        
$authenticate Services::authentication();

        
// if no user is logged in then send to the login form
        
if ( ! $authenticate->check())
        {
            
session()->set('redirect_url'current_url());
        
            return 
redirect('login');
        } 
            
    }

    public function after(RequestInterface $requestResponseInterface $response) {
    }

but I am getting an exception.  And I've tried every which way to try and resolve this.  Any ideas?
[img]data:image/png;base64,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[/img]
Reply
#4

Your missing the arguments.

PHP Code:
public function before(RequestInterface $request$arguments null

The arguments were added to version 4.0.4

Not sure if that would cause your problem but I would fix that first

The after also takes the arguments.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#5

(08-04-2020, 10:52 AM)InsiteFX Wrote: Your missing the arguments.

PHP Code:
public function before(RequestInterface $request$arguments null

The arguments were added to version 4.0.4

Not sure if that would cause your problem but I would fix that first

The after also takes the arguments.

Thanks for your help, but I am still getting the same exception after adding the arguments to both before and after functions.  Very wierd!!
Reply
#6

This is the login filter for Myth::Auth

PHP Code:
<?php namespace Myth\Auth\Filters;

use 
Config\Services;
use 
CodeIgniter\HTTP\RequestInterface;
use 
CodeIgniter\HTTP\ResponseInterface;
use 
CodeIgniter\Filters\FilterInterface;

class 
LoginFilter implements FilterInterface
{
    
/**
     * Do whatever processing this filter needs to do.
     * By default it should not return anything during
     * normal execution. However, when an abnormal state
     * is found, it should return an instance of
     * CodeIgniter\HTTP\Response. If it does, script
     * execution will end and that Response will be
     * sent back to the client, allowing for error pages,
     * redirects, etc.
     *
     * @param \CodeIgniter\HTTP\RequestInterface $request
     * @param array|null                         $params
     *
     * @return mixed
     */
    
public function before(RequestInterface $request$params null)
    {
        if (! 
function_exists('logged_in'))
        {
            
helper('auth');
        }

        
$current = (string)current_url(true)
            ->
setHost('')
            ->
setScheme('')
            ->
stripQuery('token');

        
// Make sure this isn't already a login route
        
if (in_array((string)$current, [route_to('login'), route_to('forgot'), route_to('reset-password'), route_to('register')]))
        {
            return;
        }

        
// if no user is logged in then send to the login form
        
$authenticate Services::authentication();
        if (! 
$authenticate->check())
        {
            
session()->set('redirect_url'current_url());
            return 
redirect('login');
        }
    }

    
//--------------------------------------------------------------------

    /**
     * Allows After filters to inspect and modify the response
     * object as needed. This method does not allow any way
     * to stop execution of other after filters, short of
     * throwing an Exception or Error.
     *
     * @param \CodeIgniter\HTTP\RequestInterface  $request
     * @param \CodeIgniter\HTTP\ResponseInterface $response
     * @param array|null                          $arguments
     *
     * @return void
     */
    
public function after(RequestInterface $requestResponseInterface $response$arguments null)
    {

    }

    
//--------------------------------------------------------------------


.app/Config/Filters

PHP Code:
'login'      => \Myth\Auth\Filters\LoginFilter::class, 

I would make sure that your using the version CI 4 4.0.4
Or get the developer version from here.

CodeIgniter Developer Version
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#7

Thank you very much. But (I think you knew there was a but).

When I run composer update i get the following, and codeigniter.php (const CI_VERSION = '4.0.3');

Does this mean a total uninstall and then a clean install ??? (i really hope not :-))

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
PHP Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
Script @composer dump-autoload handling the post-update-cmd event returned with error code 255
Reply
#8

Yes because they made changes to the app folder! What I do is backup the project to another folder then I can open both files in
my editor and make the changes file by file.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#9

Thank You. I know we went a bit off topic ...

Hopefully, I can get the login redirect to work :-)
Reply
#10

Hi, As suggested I backed up my project and tried to install version CI 4 4.0.4 (instead of update) and got a very similar error. I also noticed there was not a system or vendor folder.

C:\mydrive\myfolder>composer create-project codeigniter4/appstarter --no-dev
Installing codeigniter4/appstarter (v4.0.4)
- Installing codeigniter4/appstarter (v4.0.4): Loading from cache
Created project in C:\mydrive\myfolder\appstarter
Loading composer repositories with package information
Updating dependencies
Package operations: 5 installs, 0 updates, 0 removals
- Installing psr/log (1.1.3): Loading from cache
- Installing laminas/laminas-zendframework-bridge (1.0.4): Loading from cache
- Installing laminas/laminas-escaper (2.6.1): Loading from cache
- Installing kint-php/kint (3.3): Loading from cache
- Installing codeigniter4/framework (v4.0.4): Loading from cache
Writing lock file
Generating autoload files

Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
PHP Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
Script @composer dump-autoload handling the post-update-cmd event returned with error code 255





If I try the install WITHOUT --no-dev option I get simialr error


C:\mydrive\myfolder>composer create-project codeigniter4/appstarter
Installing codeigniter4/appstarter (v4.0.4)
- Installing codeigniter4/appstarter (v4.0.4): Loading from cache
Created project in C:\mydrive\myfolder\appstarter
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 36 installs, 0 updates, 0 removals
- Installing psr/log (1.1.3): Loading from cache
- Installing laminas/laminas-zendframework-bridge (1.0.4): Loading from cache
- Installing laminas/laminas-escaper (2.6.1): Loading from cache
- Installing kint-php/kint (3.3): Loading from cache
- Installing codeigniter4/framework (v4.0.4): Loading from cache
- Installing fzaninotto/faker (dev-master 5337ce5): Cloning 5337ce5261
Failed to download fzaninotto/faker from source: Failed to clone https://github.com/fzaninotto/Faker.git, git was not found, check that it is installed and in your PATH env.

'git' is not recognized as an internal or external command,
operable program or batch file.

Now trying to download from dist
- Installing fzaninotto/faker (dev-master 5337ce5): Loading from cache
- Installing mikey179/vfsstream (v1.6.8): Loading from cache
- Installing sebastian/version (2.0.1): Loading from cache
- Installing sebastian/type (1.1.3): Loading from cache
- Installing sebastian/resource-operations (2.0.1): Loading from cache
- Installing sebastian/recursion-context (3.0.0): Loading from cache
- Installing sebastian/object-reflector (1.1.1): Loading from cache
- Installing sebastian/object-enumerator (3.0.3): Loading from cache
- Installing sebastian/global-state (3.0.0): Loading from cache
- Installing sebastian/exporter (3.1.2): Loading from cache
- Installing sebastian/environment (4.2.3): Loading from cache
- Installing sebastian/diff (3.0.2): Loading from cache
- Installing sebastian/comparator (3.0.2): Loading from cache
- Installing phpunit/php-timer (2.1.2): Loading from cache
- Installing phpunit/php-text-template (1.2.1): Loading from cache
- Installing phpunit/php-file-iterator (2.0.2): Loading from cache
- Installing theseer/tokenizer (1.2.0): Loading from cache
- Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache
- Installing phpunit/php-token-stream (3.1.1): Loading from cache
- Installing phpunit/php-code-coverage (7.0.10): Loading from cache
- Installing doctrine/instantiator (1.3.1): Loading from cache
- Installing phpdocumentor/reflection-common (2.2.0): Loading from cache
- Installing symfony/polyfill-ctype (v1.18.1): Loading from cache
- Installing webmozart/assert (1.9.1): Loading from cache
- Installing phpdocumentor/type-resolver (1.3.0): Loading from cache
- Installing phpdocumentor/reflection-docblock (5.2.0): Loading from cache
- Installing phpspec/prophecy (1.11.1): Loading from cache
- Installing phar-io/version (2.0.1): Loading from cache
- Installing phar-io/manifest (1.0.3): Loading from cache
- Installing myclabs/deep-copy (1.10.1): Loading from cache
- Installing phpunit/phpunit (8.5.8): Loading from cache
kint-php/kint suggests installing kint-php/kint-twig (Provides d() and s() functions in twig templates)
kint-php/kint suggests installing kint-php/kint-js (Provides a simplified dump to console.log())
kint-php/kint suggests installing symfony/polyfill-mbstring (Replacement for ext-mbstring if missing)
kint-php/kint suggests installing symfony/polyfill-iconv (Replacement for ext-iconv if missing)
sebastian/global-state suggests installing ext-uopz (*)
sebastian/environment suggests installing ext-posix (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.7.2)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0.0)
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files

Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
PHP Fatal error: Uncaught Error: Class 'Composer\XdebugHandler\XdebugHandler' not found in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer:16
Stack trace:
#0 C:\ProgramData\ComposerSetup\bin\composer.phar(24): require()
#1 {main}
thrown in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/bin/composer on line 16
Script @composer dump-autoload handling the post-update-cmd event returned with error code 255


Any thoughts?
Reply




Theme © iAndrew 2016 - Forum software by © MyBB