-
pippuccio76
Senior Member
-
Posts: 524
Threads: 222
Joined: Jun 2017
Reputation:
2
08-30-2020, 01:05 AM
(This post was last modified: 08-30-2020, 01:08 AM by pippuccio76.)
This is my route
Route
PHP Code: $routes->add('/user/login', 'User::login',['filter'=>'usersFiltersNoAuth']); $routes->add('/login', 'User::login',['filter'=>'usersFiltersNoAuth']); $routes->add('/user/registration', 'User::registration',['filter'=>'usersFiltersNoAuth']); $routes->add('/logout', 'User::logout'); $routes->add('/user/changeEmail', 'User::changeEmail',['filter'=>'usersFiltersAuth']); $routes->add('/user/changePassword', 'User::changePassword',['filter'=>'usersFiltersAuth']);
Filter class :
PHP Code: class UsersFiltersNoAuth 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 no user is logged in then send them to the login form if (isset($_SESSION['user_id'])) { return redirect()->to('/user/index'); } }
//--------------------------------------------------------------------
/** * 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 $request, ResponseInterface $response, $arguments = null) {
}
//--------------------------------------------------------------------
} // End of YourFilterName Class.
PHP Code: class UsersFiltersAuth 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 no user is logged in then send them to the login form if (!isset($_SESSION['user_id'])) { session()->set('redirect_url', current_url()); return redirect()->to('/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 $request, ResponseInterface $response, $arguments = null) {
}
//--------------------------------------------------------------------
} // End of YourFilterName Class.
if i try to go to /user/chengeEmail or /user/changePassword when ($_SESSION['user_id] is set) i am redirect to /user/index why ?
my filters are working for different purposes but i'm using it different . I don't put filter in route
At : /var/www/htdocs/appstarter/app/Filters
//i have my classes
├── MyFilter.php
├── MyFilter10.php
├── MyFilter2.php
├── MyFilter3.php
├── MyFilter4.php
├── MyFilter5.php
├── MyFilter6.php
├── MyFilter7.php
├── MyFilter8.php
└── MyFilter9.php
eg Code: <?php namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class MyFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
session_start();
$logic=isset($_SESSION['role']) ;
if($logic==false)
{
return redirect('spam');
}
then in app/Config/Filters.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,
'myfilter'=> \App\Filters\MyFilter::class,
'myfilter2'=> \App\Filters\MyFilter2::class,
];
// Always applied before every request
public $globals = [
'before' => [
//'honeypot'
// 'csrf',
],
'after' => [
'toolbar',
//'honeypot'
],
];
// Works on all of a particular HTTP method
// (GET, POST, etc) as BEFORE filters only
// like: 'post' => ['CSRF', 'throttle'],
public $methods = [];
// List filter aliases and any before/after uri patterns
// that they should run on, like:
// 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']],
public $filters = [
'myfilter' => ['before' => ['newblog']],
'myfilter9' => ['before' => ['admin']],
//etc
];
}
CMS CI4 A CMS system, runs out of the box written on top of CI4
Arch Book CodeIgniter4 on Apache(pages 92-114)
-
pippuccio76
Senior Member
-
Posts: 524
Threads: 222
Joined: Jun 2017
Reputation:
2
(08-30-2020, 03:33 AM)captain-sensible Wrote: my filters are working for different purposes but i'm using it different . I don't put filter in route
At : /var/www/htdocs/appstarter/app/Filters
//i have my classes
├── MyFilter.php
├── MyFilter10.php
├── MyFilter2.php
├── MyFilter3.php
├── MyFilter4.php
├── MyFilter5.php
├── MyFilter6.php
├── MyFilter7.php
├── MyFilter8.php
└── MyFilter9.php
eg
Code: <?php namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class MyFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
session_start();
$logic=isset($_SESSION['role']) ;
if($logic==false)
{
return redirect('spam');
}
then in app/Config/Filters.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,
'myfilter'=> \App\Filters\MyFilter::class,
'myfilter2'=> \App\Filters\MyFilter2::class,
];
// Always applied before every request
public $globals = [
'before' => [
//'honeypot'
// 'csrf',
],
'after' => [
'toolbar',
//'honeypot'
],
];
// Works on all of a particular HTTP method
// (GET, POST, etc) as BEFORE filters only
// like: 'post' => ['CSRF', 'throttle'],
public $methods = [];
// List filter aliases and any before/after uri patterns
// that they should run on, like:
// 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']],
public $filters = [
'myfilter' => ['before' => ['newblog']],
'myfilter9' => ['before' => ['admin']],
//etc
];
}
But in documentation https://codeigniter.com/userguide4/incom...ng-filters is write as my code..
-
Gary
Member
-
Posts: 191
Threads: 38
Joined: Oct 2019
Reputation:
2
Looks like some inverted logic in the filter (?):
Code: if (isset($_SESSION['user_id']))
should perhaps be:
Code: if (! isset($_SESSION['user_id']))
|