From ba3de1ae9937363d8badf5e4574eb65661367cfe Mon Sep 17 00:00:00 2001 From: Torsten Date: Sun, 8 Dec 2024 09:19:03 +0100 Subject: [PATCH] ... --- ... Create project + set default locale 1.md} | 0 .../02.) Create Auth Controller.md | 115 ++++++++++++++++++ .../03.) API Routes Setup.md | 71 +++++++++++ .../04.) Create API Auth Filter.md} | 0 ...reate Domain Model+Controller+Migration.md | 41 +++++++ ...1.) Create project + set default locale.md | 40 ++++++ .../02.) Migrations - Add entities.md | 2 +- ...r - insert, update , delete and select.md | 0 .../04.) Model based query methods.md | 0 .../{ => _Course Notes}/05.) Seeder.md | 0 .../06.) Application Route Methods.md | 0 ...o create a route group, route namespace.md | 0 .../08.) What is filter and how to use it.md | 0 .../09.) creating a restful controller.md | 0 .../10.) API Routes + route parameter.md | 0 ...roller Parameters, store uploaded image.md | 0 .../{ => _Course Notes}/12.) List students.md | 0 .../13.) Show Student Details.md | 0 .../14.) Update Student.md | 0 .../15.) Shield Auth+Project Controller.md | 0 .../16.) API Routes Setup.md | 0 .../{ => _Course Notes}/17.) Register API.md | 1 - .../{ => _Course Notes}/18.) Create login.md | 3 - .../19.) Create API Auth Filter.md | 61 ++++++++++ .../20.) Getting user_id from shield.md | 0 .../21.) User Logout API.md | 0 .../22.) Create Project API.md | 0 .../23.) Delete Project API.md | 0 .../23.) List project API.md | 0 .../24.) Delete Project API.md | 0 ....) CORS (Cross Origin Resource Sharing).md | 0 31 files changed, 329 insertions(+), 5 deletions(-) rename MyObsidianVault/WebDev/2 CodeIgniter/{01.) Create project + set default locale.md => API Project setup/01.) Create project + set default locale 1.md} (100%) create mode 100644 MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/02.) Create Auth Controller.md create mode 100644 MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/03.) API Routes Setup.md rename MyObsidianVault/WebDev/2 CodeIgniter/{19.) Create API Auth Filter.md => API Project setup/04.) Create API Auth Filter.md} (100%) create mode 100644 MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/05.) Create Domain Model+Controller+Migration.md create mode 100644 MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/01.) Create project + set default locale.md rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/02.) Migrations - Add entities.md (96%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/03.) Query Builder - insert, update , delete and select.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/04.) Model based query methods.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/05.) Seeder.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/06.) Application Route Methods.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/07.) How to create a route group, route namespace.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/08.) What is filter and how to use it.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/09.) creating a restful controller.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/10.) API Routes + route parameter.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/11.) Validate Controller Parameters, store uploaded image.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/12.) List students.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/13.) Show Student Details.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/14.) Update Student.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/15.) Shield Auth+Project Controller.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/16.) API Routes Setup.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/17.) Register API.md (99%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/18.) Create login.md (99%) create mode 100644 MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/19.) Create API Auth Filter.md rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/20.) Getting user_id from shield.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/21.) User Logout API.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/22.) Create Project API.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/23.) Delete Project API.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/23.) List project API.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/24.) Delete Project API.md (100%) rename MyObsidianVault/WebDev/2 CodeIgniter/{ => _Course Notes}/25.) CORS (Cross Origin Resource Sharing).md (100%) diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/01.) Create project + set default locale.md b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/01.) Create project + set default locale 1.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/01.) Create project + set default locale.md rename to MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/01.) Create project + set default locale 1.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/02.) Create Auth Controller.md b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/02.) Create Auth Controller.md new file mode 100644 index 0000000..b05b7ed --- /dev/null +++ b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/02.) Create Auth Controller.md @@ -0,0 +1,115 @@ +```bash +php spark make:controller Api/Auth --suffix --restful +``` + + +Routes.php +```php +//Get +$routes->get("logout", "AuthController::logout", ["filter" => "apiauth"]); +``` + + +Api/AuthController.php +```php +use CodeIgniter\Restful\ResourceController; +use CodeIgniter\Shield\Models\UserModel; +use CodeIgniter\Shield\Entities\User; + +class AuthController extends ResourceController +{ + //Post + public function register() + { + $rules = [ + "username" => "required|is_unique[users.username]", + "email" => "required|valid_email|is_unique[auth_identities.secret]", // gets written to secret field in user table + "password" => "required" // gets written to secret 2 field in user table + ]; + + if (!$this->validate($rules)) { + return $this->respondCreated([ + "status" => false, + "message" => $this->validator->getErrors(), + "data" => [] + ] + ); + + $um = new UserModel(); // coming from Shield + $userEntity = new User([ + "username" => $this->request->getVar("username"), + "email" => $this->request->getVar("email"), + "password" => $this->request->getVar("password") + ]); + $um->save($userEntity); + + return $this->respondCreated( [ + "status" => true, + "message" => "User saved successfully", + "data" => [] + ]); + } + + ////////////////////////////////////// + + // Post + public function login() + { + if(auth()->loggedIn()){ + auth()->logout(); + } + + $rules = [ + "email" => "required|valid_email", + "password" => "required" + ]; + + if (!$this->validate($rules)) { + return $this->respondCreated([ + "status" => false, + "message" => $this->validator->getErrors(), + "data" => [] + ]); + + // success + $credentials = [ + "email" => $this->request->getVar("email"), + "password" => $this->request->getVar("password") + ]; + + $loginAttempt = auth()->attempt($credentials); + if (!$loginAttempt->isOK()) { + return $this->respondCreated([ + "status" => false, + "message" => "Invalid login details", + "data" => [] + ]); + + // We have a valid data set + $um = new UserModel(); + $userData = $um->findById(auth()->id()); + $token = $userData->generateAccessToken("thisismysecretkey"); + $auth_token = $token->raw_token; // Only available after generation + + return $this->respondCreated( [ + "status" => true, + "message" => "User logged in successfully", + "data" => [ + "token" => $auth_token + ] ); + } + + //////////////////////// + + public function logout() { + auth()->logout(); + auth()->user()->revokeAllAccessTokens(); + + return $this->respondCreated([ + "status" => true, + "message" => "User logged out successfully", + "data" => [] + ]); + } +} +``` \ No newline at end of file diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/03.) API Routes Setup.md b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/03.) API Routes Setup.md new file mode 100644 index 0000000..5f1589e --- /dev/null +++ b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/03.) API Routes Setup.md @@ -0,0 +1,71 @@ +https://www.youtube.com/watch?v=_ZRHt-fWJpc&list=PLT9miexWCpPW6Z_OXNv2d78cqCrZaPrVG&index=29 + +app/Config/Routes.php + +Remember: Shield added => +```php +service('auth')->routes($routes) +``` + +```php +// API routes (put below service('auth')) +$routes->group("api", ["namespace" => "App\Controller\Api"], function($routes) { + $routes->post("register", "AuthController::register"); + $routes->post("login", "AuthController::login"); + $routes->get("profile", "AuthController::profile"); + $routes->get("logout", "AuthController::logout", ["filter"=>"apiauth"]); + + //$routes->post("add-project", "ProjectController::addProject"); + //$routes->get("list-projects", "ProjectController::listProjects"); + //$routes->delete("delete-project/(:num)", "ProjectController::deleteProject/$1"); +}); +``` + +$routes->get("logout", "AuthController::logout", ["filter" => "apiauth"]); + + + + + +```php + +use CodeIgniter\Restful\ResourceController; +use CodeIgniter\Shield\Models\UserModel; +use CodeIgniter\Shield\Entities\User; + +class AuthController extends ResourceController +{ + //Post + public function register() + { + $rules = [ + "username" => "required|is_unique[users.username]", + "email" => "required|valid_email|is_unique[auth_identities.secret]", // gets written to secret field in user table + "password" => "required" // gets written to secret 2 field in user table + ]; + + if (!$this->validate($rules)) { + return $this->respondCreated([ + "status" => false, + "message" => $this->validator->getErrors(), + "data" => [] + ] + ); + + $um = new UserModel(); // coming from Shield + $userEntity = new User([ + "username" => $this->request->getVar("username"), + "email" => $this->request->getVar("email"), + "password" => $this->request->getVar("password") + ]); + $um->save($userEntity); + + return $this->respondCreated( [ + "status" => true, + "message" => "User saved successfully", + "data" => [] + ]); + } + +} +``` \ No newline at end of file diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/19.) Create API Auth Filter.md b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/04.) Create API Auth Filter.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/19.) Create API Auth Filter.md rename to MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/04.) Create API Auth Filter.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/05.) Create Domain Model+Controller+Migration.md b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/05.) Create Domain Model+Controller+Migration.md new file mode 100644 index 0000000..f92e9c9 --- /dev/null +++ b/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/05.) Create Domain Model+Controller+Migration.md @@ -0,0 +1,41 @@ +```bash +php spark make:model Board --suffix +php spark make:controller Api/Board --suffix --restful +``` + + +Add allowed fields to model: +(BoardModel.php) +```php +$allowedFields = ["name"]; +``` + + + +```php +php spark make:migration create_boards +``` + +Migration file: + +```php +//up: + $this->forge->addField([ + "id" => [ "type"=>"INT", "constraint"=>5, "auto increment" => true, "unsigned" => true ], + "name" => [ "type"=>"VARCHAR", "constraint" => 120, "null" => false ] + ]); + $this->forge->addPrimaryKey("id); + $this->forge->createTable("boards"); + +//down: + $this->forge->dropTable("boards"); +``` + + +```bash +php spark migrate:status + +php spark migrate +``` + +Create seeder ? \ No newline at end of file diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/01.) Create project + set default locale.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/01.) Create project + set default locale.md new file mode 100644 index 0000000..f512795 --- /dev/null +++ b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/01.) Create project + set default locale.md @@ -0,0 +1,40 @@ +Inside Devilbox container: +```bash +devilbox@php-8.1.14 in /shared/httpd $ pwd +/shared/httpd + + +mkdir myproject +cd myproject +composer create-project codeigniter4/appstarter myprojectapp +ln -s myprojectapp/public htdocs +``` + + +Add shield: +```bash +composer require codeigniter4/shield +``` + +In case of issues, see installation. +```bash +composer config minimum-stability dev +composer config prefer-stable true +``` + +```bash +php spark shield:setup +``` + +#### + +SET DEFAULT LOCALE + + +Config/App.php +```php + + public bool $negotiateLocale = true; + public string $defaultLocale = 'en'; + public array $supportedLocales = ['en', 'de']; +``` \ No newline at end of file diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/02.) Migrations - Add entities.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/02.) Migrations - Add entities.md similarity index 96% rename from MyObsidianVault/WebDev/2 CodeIgniter/02.) Migrations - Add entities.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/02.) Migrations - Add entities.md index bce7cdb..ebaed12 100644 --- a/MyObsidianVault/WebDev/2 CodeIgniter/02.) Migrations - Add entities.md +++ b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/02.) Migrations - Add entities.md @@ -6,7 +6,7 @@ Creates Controller, Model, Migration, Seeder ```php //up: $this->forge->addField((["id"=> - ["type"=>"INT, + ["type"=>"INT", "constraint"=>5, "auto increment" => true, "unsigned" => true diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/03.) Query Builder - insert, update , delete and select.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/03.) Query Builder - insert, update , delete and select.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/03.) Query Builder - insert, update , delete and select.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/03.) Query Builder - insert, update , delete and select.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/04.) Model based query methods.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/04.) Model based query methods.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/04.) Model based query methods.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/04.) Model based query methods.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/05.) Seeder.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/05.) Seeder.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/05.) Seeder.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/05.) Seeder.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/06.) Application Route Methods.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/06.) Application Route Methods.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/06.) Application Route Methods.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/06.) Application Route Methods.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/07.) How to create a route group, route namespace.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/07.) How to create a route group, route namespace.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/07.) How to create a route group, route namespace.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/07.) How to create a route group, route namespace.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/08.) What is filter and how to use it.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/08.) What is filter and how to use it.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/08.) What is filter and how to use it.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/08.) What is filter and how to use it.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/09.) creating a restful controller.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/09.) creating a restful controller.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/09.) creating a restful controller.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/09.) creating a restful controller.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/10.) API Routes + route parameter.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/10.) API Routes + route parameter.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/10.) API Routes + route parameter.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/10.) API Routes + route parameter.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/11.) Validate Controller Parameters, store uploaded image.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/11.) Validate Controller Parameters, store uploaded image.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/11.) Validate Controller Parameters, store uploaded image.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/11.) Validate Controller Parameters, store uploaded image.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/12.) List students.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/12.) List students.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/12.) List students.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/12.) List students.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/13.) Show Student Details.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/13.) Show Student Details.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/13.) Show Student Details.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/13.) Show Student Details.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/14.) Update Student.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/14.) Update Student.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/14.) Update Student.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/14.) Update Student.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/15.) Shield Auth+Project Controller.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/15.) Shield Auth+Project Controller.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/15.) Shield Auth+Project Controller.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/15.) Shield Auth+Project Controller.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/16.) API Routes Setup.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/16.) API Routes Setup.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/16.) API Routes Setup.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/16.) API Routes Setup.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/17.) Register API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/17.) Register API.md similarity index 99% rename from MyObsidianVault/WebDev/2 CodeIgniter/17.) Register API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/17.) Register API.md index 4c8e8da..d943e04 100644 --- a/MyObsidianVault/WebDev/2 CodeIgniter/17.) Register API.md +++ b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/17.) Register API.md @@ -51,7 +51,6 @@ https://onlinewebtutorblog.com/codeigniter-4-restful-api-using-shield-authentica My version: ```php - use CodeIgniter\Restful\ResourceController; use CodeIgniter\Shield\Models\UserModel; use CodeIgniter\Shield\Entities\User; diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/18.) Create login.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/18.) Create login.md similarity index 99% rename from MyObsidianVault/WebDev/2 CodeIgniter/18.) Create login.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/18.) Create login.md index eb80412..456f071 100644 --- a/MyObsidianVault/WebDev/2 CodeIgniter/18.) Create login.md +++ b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/18.) Create login.md @@ -8,7 +8,6 @@ In AuthController::login: ```php - // Post public function login() { @@ -66,10 +65,8 @@ In AuthController::login: ]; } } - return $this->respondCreated($response); } - ``` https://shield.codeigniter.com/references/authentication/tokens/ diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/19.) Create API Auth Filter.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/19.) Create API Auth Filter.md new file mode 100644 index 0000000..bf9d0b5 --- /dev/null +++ b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/19.) Create API Auth Filter.md @@ -0,0 +1,61 @@ +https://www.youtube.com/watch?v=USqOc-GCA4s&list=PLT9miexWCpPW6Z_OXNv2d78cqCrZaPrVG&index=32 + +Create AuthFilter.php +```bash +php spark make:filter Auth --suffix +``` + +Define before method in AuthFilter.php +```php +public function before(RequestInterface $request, $arguments = null) +{ + helper("auth"); + + if (!auth("tokens")->loggedIn()) { + return redirect()->to(base_url("api/ invalid-access")); // need to create invalid-access route + } +} +``` + + +Routes.php +```php +// API ROUTES +$routes->group("api",["namespace]=> "App\Controllers\Api"], function($routes) { + ... + $routes->get("invalid-access", "AuthController::accessDenied"); + §routes->get('demo-method", "AuthController::demoMethod",["filter" => "apiauth"]); // Filter Name is defined in aliases array in Filters.php below. + ... +``` + +Define accessDenied method in app/Controllers/Api/AuthController.php +```php +... +public function accessDenied() +{ + return $this->respondCreated([ + "status" => false, + "message" => "Invalid access", + "data" => [] + ]); +} +... +``` + +Add filter to app/Config/Filters.php +```php +use App\Filters\AuthFilter; + + +public array $aliases = [ + 'csrf' => CSRF::class, + 'toolbar' => DebugToolbar::class, + 'honeypot' => Honeypot::class, + 'invalidchars' => InvalidChars::class, + 'secureheaders' => SecureHeaders::class, + 'apiauth' => AuthFilter::class +] +``` + +Authorize request by adding field "Authorization" with value "Bearer xxxxxx" in Request Header: +![[Pasted image 20241127140801.png]] \ No newline at end of file diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/20.) Getting user_id from shield.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/20.) Getting user_id from shield.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/20.) Getting user_id from shield.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/20.) Getting user_id from shield.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/21.) User Logout API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/21.) User Logout API.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/21.) User Logout API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/21.) User Logout API.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/22.) Create Project API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/22.) Create Project API.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/22.) Create Project API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/22.) Create Project API.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/23.) Delete Project API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/23.) Delete Project API.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/23.) Delete Project API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/23.) Delete Project API.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/23.) List project API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/23.) List project API.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/23.) List project API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/23.) List project API.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/24.) Delete Project API.md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/24.) Delete Project API.md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/24.) Delete Project API.md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/24.) Delete Project API.md diff --git a/MyObsidianVault/WebDev/2 CodeIgniter/25.) CORS (Cross Origin Resource Sharing).md b/MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/25.) CORS (Cross Origin Resource Sharing).md similarity index 100% rename from MyObsidianVault/WebDev/2 CodeIgniter/25.) CORS (Cross Origin Resource Sharing).md rename to MyObsidianVault/WebDev/2 CodeIgniter/_Course Notes/25.) CORS (Cross Origin Resource Sharing).md