0

i can not understand why give me an error that says unexpected en of file at 74 last line of code.

i tried with or without ?> but change error and not works anyway someone can help me?

is a jwt page login, i use a slimapp framework. when i do a call post with username and password

this is the error i have:
Parse error: syntax error, unexpected '?>' in C:\xampp\htdocs\slimapp\src\routes\login.php on line 74

  <?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
    header('Access-Control-Allow-Headers: token, Content-Type');


$app = new \Slim\App;


$app->post("/authenticate", function(Request $request, Response $response){
    $username= $request->getParam('username');
    $password= $request->getParam('password');
    $table_name = 't_users';


    $sql ="SELECT id, first_name, last_name, password FROM " . $table_name . " WHERE username = ? LIMIT 0,1";

        $db = new db();
        $db=$db->connect();

        $stmt = $conn->prepare( $sql );
        $stmt->bindParam(1, $username);
        $stmt->execute();
        $num = $stmt->rowCount();

        if($num > 0){
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
            $id = $row['id'];
            $username = $row['username'];
            $roles = $row['roles'];          
            $password2 = $row['password'];

            if(password_verify($password, $password2))
            {
                $secret_key = "javainuse";
                $issuer_claim = "LATAVOLAITALIANA"; // this can be the servername
                $audience_claim = "THE_AUDIENCE";
                $issuedat_claim = time(); // issued at
                $notbefore_claim = $issuedat_claim + 10; //not before in seconds
                $expire_claim = $issuedat_claim + 60; // expire time in seconds
                $token = array(
                    "iss" => $issuer_claim,
                    "aud" => $audience_claim,
                    "iat" => $issuedat_claim,
                    "nbf" => $notbefore_claim,
                    "exp" => $expire_claim,
                    "data" => array(
                        "id" => $id,
                        "username" => $username,
                        "roles" => $roles,
                        "email" => $email
                ));

                http_response_code(200);

                $jwt = JWT::encode($token, $secret_key);
                echo json_encode(
                    array(
                        "message" => "Successful login.",
                        "jwt" => $jwt,
                        "email" => $email,
                        "expireAt" => $expire_claim
                    ));
            }
            else{

                http_response_code(401);
                echo json_encode(array("message" => "Login failed.", "password" => $password));
            }
        }
    }
    ?>
jps
  • 20,041
  • 15
  • 75
  • 79
matteo sperti
  • 31
  • 1
  • 7

1 Answers1

1

I edit your code. You forgot add }); in the end script:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
header('Access-Control-Allow-Headers: token, Content-Type');


$app = new \Slim\App;


$app->post("/authenticate", function(Request $request, Response $response){
    $username= $request->getParam('username');
    $password= $request->getParam('password');
    $table_name = 't_users';


    $sql ="SELECT id, first_name, last_name, password FROM " . $table_name . " WHERE username = ? LIMIT 0,1";

    $db = new db();
    $db=$db->connect();

    $stmt = $conn->prepare( $sql );
    $stmt->bindParam(1, $username);
    $stmt->execute();
    $num = $stmt->rowCount();

    if($num > 0){
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        $id = $row['id'];
        $username = $row['username'];
        $roles = $row['roles'];
        $password2 = $row['password'];

        if(password_verify($password, $password2))
        {
            $secret_key = "javainuse";
            $issuer_claim = "LATAVOLAITALIANA"; // this can be the servername
            $audience_claim = "THE_AUDIENCE";
            $issuedat_claim = time(); // issued at
            $notbefore_claim = $issuedat_claim + 10; //not before in seconds
            $expire_claim = $issuedat_claim + 60; // expire time in seconds
            $token = array(
                "iss" => $issuer_claim,
                "aud" => $audience_claim,
                "iat" => $issuedat_claim,
                "nbf" => $notbefore_claim,
                "exp" => $expire_claim,
                "data" => array(
                    "id" => $id,
                    "username" => $username,
                    "roles" => $roles,
                    "email" => $email
                ));

            http_response_code(200);

            $jwt = JWT::encode($token, $secret_key);
            echo json_encode(
                array(
                    "message" => "Successful login.",
                    "jwt" => $jwt,
                    "email" => $email,
                    "expireAt" => $expire_claim
                ));
        }
        else{

            http_response_code(401);
            echo json_encode(array("message" => "Login failed.", "password" => $password));
        }
    }
}); // edit
    ?>
Dmitry Leiko
  • 3,970
  • 3
  • 25
  • 42