سلام
توکن و توی headers با key value که گفته شده ارسال میکنم
اما نمیتونم توکن و بگیرم
از فانکشن getAuthorizationHeader() هم استفاده کردم بازم null برام برمیگردونه توی data
index.php
<?php
include "../../../loder.php";
use App\Services\CityService;
use App\utilities\CacheUtility;
use App\utilities\Response;
$token = getAuthorizationHeader();
Response::respondAndDie([$token],Response::HTTP_OK);
$CityService = new CityService();
$request_method = $_SERVER['REQUEST_METHOD'];
$request_body = json_decode(file_get_contents('php://input'),true);
switch ($request_method) {
case 'GET':
$province_id = $_GET['province_id'] ?? null;
$pagesize = $_GET['pagesize'] ?? null;
$page = $_GET['page'] ?? null;
CacheUtility::start();
$request_data =
[
'province_id' => $province_id,
'fields' => $_GET['fields'] ?? null,
'orderby' => $_GET['orderby'] ?? null,
'page' => $_GET['page'] ?? null,
'pagesize' => $_GET['pagesize'] ?? null,
];
$response = $CityService->getcity($request_data);
if (empty($response))
Response::respondAndDie(['province Not Found'],Response::HTTP_NOT_FOUND);
echo Response::respond($response,Response::HTTP_OK);
CacheUtility::end();
die();
case 'POST':
if (!isValidCity($request_body))
Response::respondAndDie(['Invalid City Data ...'],Response::HTTP_NOT_ACCEPTABLE);
$response = $CityService->createCity($request_body);
Response::respondAndDie($response,Response::HTTP_CREATED);
case 'PUT':
[$city_id,$name] = [$request_body['city_id'],$request_body['name']];
$response = $CityService->updateCityName($city_id,$name);
if (!is_numeric($city_id) or empty($response)) {
Response::respondAndDie(['City Not Found'],Response::HTTP_NOT_FOUND);
}
Response::respondAndDie($response,Response::HTTP_OK);
case 'DELETE':
(int)$city_id = $_GET['city_id'] ?? null;
$response = $CityService->deleteCity((int)$city_id);
if (empty($response)) {
Response::respondAndDie(['City Not Found'],Response::HTTP_NOT_FOUND);
}
Response::respondAndDie($response,Response::HTTP_OK);
default:
Response::respondAndDie(['Invalid Request Method'],Response::HTTP_METHOD_NOT_ALLOWED);
}
iran.php
<?php
use \Firebase\JWT\JWT;
try {
$pdo = new PDO("mysql:dbname=iran;host=localhost", 'root', '');
$pdo->exec("set names utf8;");
// echo "Connection OK!";
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
}
#============== Simple Validators ================
function isValidCity($data){
if(empty($data['province_id']) or !is_numeric($data['province_id']))
return false;
return empty($data['name']) ? false : true;
}
function isValidProvince($data){
# its better to validate data in database
$province_id = intval($data['province_id'] ?? 0);
if($province_id < 1 OR $province_id > 31)
return false;
return true;
}
#================ Read Operations =================
function getCities($data = null){
global $pdo;
$province_id = $data['province_id'] ?? null;
$fields = $data['fields'] ?? '*';
$orderby = $data['orderby'] ?? null;
$page = $data['page'] ?? null;
$pagesize = $data['pagesize'] ?? null;
$orderByStr = '';
if(!is_null($orderby))
$orderByStr = " order by $orderby ";
$limit = '';
if(is_numeric($page) and is_numeric($pagesize)){
$start = ($page-1) * $pagesize;
$limit = " LIMIT $start,$pagesize"; // pagination
}
$where = '';
if(!is_null($province_id) and is_numeric($province_id)){
$where = "where province_id = {$province_id} ";
}
# validate fields
$sql = "select $fields from city $where $orderByStr $limit";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$records = $stmt->fetchAll(PDO::FETCH_OBJ);
return $records;
}
function getProvinces($data = null){
global $pdo;
$province_id = $data['id'] ?? null;
$selectprovinc = "";
if(!is_null($province_id) and is_numeric($province_id)){
$selectprovinc = "WHERE `id` = $province_id";
}
$sql = "SELECT * FROM `province` $selectprovinc ";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$records = $stmt->fetchAll(PDO::FETCH_OBJ);
return $records;
}
#================ Create Operations =================
function addCity($data){
global $pdo;
if(!isValidCity($data)){
return false;
}
$sql = "INSERT INTO `city` (`province_id`, `name`) VALUES (:province_id, :name);";
$stmt = $pdo->prepare($sql);
$stmt->execute([':province_id'=>$data['province_id'],':name'=>$data['name']]);
return $stmt->rowCount();
}
function addProvince($data){
global $pdo;
$sql = "INSERT INTO `province` (`name`) VALUES (:name);";
$stmt = $pdo->prepare($sql);
$stmt->execute([':name'=>$data['name']]);
return $stmt->rowCount();
}
#================ Update Operations =================
function changeCityName($city_id,$name){
global $pdo;
$sql = "update city set name = '$name' where id = $city_id";
$stmt = $pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}
function changeProvinceName($province_id,$name){
global $pdo;
$sql = "update province set name = '$name' where id = $province_id";
$stmt = $pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}
#================ Delete Operations =================
function deleteCity($city_id){
global $pdo;
$sql = "delete from city where id = $city_id";
$stmt = $pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}
function deleteProvince($province_id){
global $pdo;
$sql = "delete from province where id = $province_id";
$stmt = $pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}
#================ Auth Operations =================
$users = [
(object)['id'=>1,'name'=>'Loghman','email'=>'[email protected]','role' => 'admin','allowed_provinces' => []],
(object)['id'=>2,'name'=>'Sara','email'=>'[email protected]','role' => 'Governor','allowed_provinces' => [7,8,9]],
(object)['id'=>3,'name'=>'Ali','email'=>'a@n','role' => 'mayor','allowed_provinces' => [3]],
(object)['id'=>4,'name'=>'Hassan','email'=>'[email protected]','role' => 'president','allowed_provinces' => []]
];
function getUserById($id){
global $users;
foreach ($users as $user)
if($user->id == $id)
return $user;
return null;
}
function getUserByEmail($email){
global $users;
foreach ($users as $user)
if(strtolower($user->email) == strtolower($email))
return $user;
return null;
}
function createApiToken($user){
$payload =
[
'user_id' => $user->id,
];
return JWT::encode($payload, JWT_KEY, JWT_ALG);
}
/**
* Get header Authorization
* */
function getAuthorizationHeader(){
$headers = null;
if (isset($_SERVER['Authorization'])) {
$headers = trim($_SERVER["Authorization"]);
}
else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
$headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
} elseif (function_exists('apache_request_headers')) {
$requestHeaders = apache_request_headers();
// Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
$requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
//print_r($requestHeaders);
if (isset($requestHeaders['Authorization'])) {
$headers = trim($requestHeaders['Authorization']);
}
}
return $headers;
}
/**
* get access token from header
* */
function getBearerToken() {
$headers = getAuthorizationHeader();
// HEADER: Get the access token from the header
if (!empty($headers)) {
if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
return $matches[1];
}
}
return null;
}
ممنون میشم اگه راهنمایی کنید.
سلام و احترام
یه بار توکن رو از بخش Authorization و Bearer token رو انتخاب کنید و توکن داخل input رو به روش قرار بدید و دوباره تست کنید
تست کرده بودم اما باز همون null برمیگردونه
پروژه ای که خود استاد هم قرار داده Iran - Source codes استفاده کردم
بعد از
$token = getBearerToken();
از
Response::respondAndDie([$token],Response::HTTP_OK);
استفاده کردم که بتونم توکن که تو headers ارسال شده و ببینم که بازم همون null برمیگرده
از بخش Authorization و Bearer token کد خود استاد
مشکل از سیستم نمیتونه باشه؟
چون هم کد هونه هم تمام سرچ هایی که کردم با این روش جواب گرفتن . . . .’’