javascript - token 身份验证 Rest API session

标签 javascript php ajax rest

我正在使用 Slim Framework 创建无状态 REST API。在使用它之前,我在服务器端创建了一个 session ,并在每个页面上进行 session 检查。但现在,我不知道如何控制它。

我的数据库中为每个用户都有一个 api_key。用户登录后,我用 api_key 进行响应并将用户重定向到 index.php。但 api_key 不保留。如何使用 Javascript 将 api_key 传递到每个页面?原因是如果有人想要从我的 REST API 获取数据,他们必须向我发送 api_key,并且如果用户在我不想再次显示登录页面之前登录。

这是我的 REST API 部分:

$app->post('/userlogin', function() use ($app) {
    verifyRequiredParams(array('email', 'password'));
    $email = $app->request->post('email');
    $password = $app->request->post('password');

    $objUserRegLog = new UserRegistrationLogin;
    $result = $objUserRegLog->getUserByEmailAndPassword($email, $password);
    if (!$result) {
        $response["error"] = true;
        $response["message"] = "Error! Invalid e-mail address or password.";
    } else {
        $response["error"] = false;
        $response["id"] = $result["id"];
        $response["email"] = $result["email"];
        $response["api_key"] = $result["api_key"];
    }
    echoResponse(200, $response);
});

$app->get('/students', 'authenticateStudent', function() use ($app) {
    $objStd = new Students;
    $result = $objCases->getAllStudents();
    if (!$result) {
        $response["error"] = true;
        $response["error_msg"] = "An error occured.";
        $status_code = 404;
    } else {
        $response["error"] = false;
        $response["cases"] = $result;
        $status_code = 200;
    }
    echoResponse($status_code, $response);
});

function authenticateStudent(\Slim\Route $route) {
    $headers = apache_request_headers();
    $response = array();
    $app = \Slim\Slim::getInstance();

    if (isset($headers['Authorization'])) {
        $db = new DbOperation();
        $api_key = $headers['Authorization'];
        if (!$db->isValidStudent($api_key)) {
            $response["error"] = true;
            $response["message"] = "Access Denied. Invalid Api key";
            echoResponse(401, $response);
            $app->stop();
        }
    } else {
        $response["error"] = true;
        $response["message"] = "Api key is misssing";
        echoResponse(400, $response);
        $app->stop();
    }
}

以及使用 AJAX 的调用:

$.signin = function() {
    var inputVals = $("#form_signin").serialize();
    $.ajax({
        url : "api/v1/userlogin",
        data : inputVals,
        dataType : "json",
        type : "post",
        success : function(response) {
            if (response.error) {
                $(".popup").trigger("click");
                $(".modal-title").html(response.message_title);
                $(".modal-body").html(response.message);
            } else {
                window.location.href = "index.php";
            }
            console.log(response);
        }
    });
    return false;
}

最佳答案

嗯,你需要明白,客户端发送到你的服务器的每个请求都是独立的,所以你需要在客户端系统中放置一个变量( token ),以便让他在每个请求中发送它,所以你知道谁一直在与您的服务器通话。开始阅读:http://www.w3schools.com/php/php_cookies.asp

一旦您了解了 cookie 是什么以及如何工作,请尝试进一步阅读有关身份验证和授权主题的内容。

关于javascript - token 身份验证 Rest API session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764883/

相关文章:

javascript - 如何在多选项卡页面上的选项卡加载时显示第一张幻灯片

javascript - 如何加载所选下拉值ajax的所有匹配数据行

javascript - Jquery 和 Ajax 分页回调

Javascript 正则表达式匹配无法正确运行

javascript - Jquery — 设置子项以填充父项的剩余宽度

php - 在 PHP 中利用 MySQL "Comments"部分处理变量,是好还是坏主意?

javascript - 从下拉列表中选择项目时显示文本框 html php?

javascript - 创建具有不同范围的 ES6/ESNext 原型(prototype)函数(不是内联函数)

javascript - 在悬停另一个元素时更改元素的显示不起作用

php - 源代码和检查元素输出的差异(以及网页的行为)