0

我不明白为什么在最后一行代码的 74 处给我一个错误,说文件的意外 en。

我尝试了或不尝试?>但更改错误并且无论如何都不起作用有人可以帮助我吗?

是一个 jwt 页面登录,我使用 slimapp 框架。当我使用用户名和密码进行通话时

这是我遇到的错误:
Parse error : syntax error, unexpected '?>' in C:\xampp\htdocs\slimapp\src\routes\login.php在第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));
            }
        }
    }
    ?>
4

1 回答 1

1

我编辑你的代码。您忘记});在结尾脚本中添加:

<?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
    ?>
于 2019-11-19T09:21:17.843 回答