ارسال و دریافت توکن

پرسیده شده
فعالیت 915 روز پیش
دیده شده 449 بار
0

سلام
توکن و توی 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;
}

ممنون میشم اگه راهنمایی کنید.

فایل پیوست

0
حذف شده

سلام و احترام

لطفا پروژه رو زیپ کنید و ارسال کنید

فایل پیوست

امیر صالحی

توسط

امیر صالحی

6 آبان 00

0
حذف شده

فایل پروژه

فایل پیوست
Iran.zip
36.26 KB

آرمان محمدی پور

توسط

آرمان محمدی پور

6 آبان 00

0
حذف شده

سلام و احترام

یه بار توکن رو از بخش Authorization و  Bearer token  رو انتخاب کنید و توکن داخل input رو به روش قرار بدید و دوباره تست کنید

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

8 آبان 00

0
حذف شده

تست کرده بودم اما باز همون null برمیگردونه
پروژه ای که خود استاد هم قرار داده Iran - Source codes استفاده کردم

بعد از 

 

$token = getBearerToken();

 

از

 

Response::respondAndDie([$token],Response::HTTP_OK);

 

استفاده کردم که بتونم توکن که تو headers ارسال شده و ببینم که بازم همون null برمیگرده

 

فایل پیوست

آرمان محمدی پور

توسط

آرمان محمدی پور

8 آبان 00

0
حذف شده

از بخش Authorization و Bearer token کد خود استاد

 

مشکل از سیستم نمیتونه باشه؟

 

چون هم کد هونه هم تمام سرچ هایی که کردم با این روش جواب گرفتن   . . . .’’

فایل پیوست

آرمان محمدی پور

توسط

آرمان محمدی پور

8 آبان 00