使用 PHP 连接、授权和获取 Web 应用程序的数据

Connecting, authorizing and getting data for a web application using PHP

任何 help/advice/direction 将不胜感激。即使这个问题不具体,也请耐心等待。

我正在开发一个 Web 应用程序,它将连接到一个预先存在的基于云的商业日历,该日历将有特定事件的时间表。

我将有一个授权按钮,它只会要求用户输入其基于云的日历的凭据。用户成功输入凭据后,我希望我的应用程序连接到基于云的应用程序的数据库并获取必要的数据。

流程会像

用户 -> 单击授权按钮 -> 输入凭据 -> 连接到系统 -> 获取必要的数据 -> 在我的 Web 应用程序中更新它。

我正要画一个空白,因为我没有找到任何关于如何访问单独的应用程序和获取数据的有用资源。 我知道我必须构建某种 API 才能与该系统进行通信,但我不知道具体如何进行。

抱歉,如果我说得不对,但我真的需要一些帮助。是否有一些库提供类似的功能?我应该如何开始?我使用 PHP 作为服务器端语言。

  1. 点击按钮 -> 重定向到登录表单

  2. 登录表单 -> 用户输入凭据 -> 提交表单

  3. 在相应的操作页面中,即。您将 post 数据所在的页面,您将拥有 Username/Email 和密码

  4. 您必须进行身份验证。现在要进行身份验证,您无法直接访问其他服务器数据库(直接访问云数据库),因此您需要调用要进行身份验证的相应云基础数据库的 API。对于此调用,您可以使用带有 POST 参数的 CURL 调用或任何必要的 HTTP 请求,如 GET、POST、PUT、DELETE、PATCH。确保使用基于令牌的 API 调用。根据云数据库安全设计,您甚至可以进行任何分别安全的 API 调用。

奖励:那么什么是基于令牌的 API 调用?每当您请求 API 跨服务器调用时。其他服务器确保您可以将一些随机文本与其他参数一起发送。另一方面,收到您请求的服务器确保从其各自的数据库 table 验证此令牌,以确保您是有效用户并允许您执行必要的操作,例如获取客户详细信息、获取产品详情等等。

  1. 认证APIreturnsAUTHENTICATED数据。在此基础上,您可以继续执行操作。

  2. 如果身份验证失败,您可以向用户显示无效凭据错误消息。

  3. 如果成功,您将获得访问权限,您现在可以向数据库执行插入数据。

  4. 要从其他数据库读取数据table,因为您没有必要的权限,您不能直接访问它。对相应函数进行 API 调用以获取所有必要的数据,无论是 GET、POST、PUT、DELETE、PATCH。

  5. 到目前为止,如果您想获取 table CUSTOMER 的所有数据,那么您必须向 API 发出 GET 请求,其中 returns JSON 数据。

  6. 现在您可以决定如何处理这些数据。无论您是想将其保存在各自的数据库中 table 还是即时使用它。

学习如何编写 API 的

例如:

NOTE: I have not added any security check make sure you work out on the same

认为您执行 GET 请求是为了获取客户的详细信息,那么您可以执行以下操作

API URL: http://127.0.0.1/project/getCustomers.php?token=2fdsd5f42314sfd85sds 请求方法:获取

getCustomers.php

<?php
include_once 'dbConnect.php'; //I am having $link as database link
//Only !isset will also work
$errors = [];
if(empty($_GET['token']) || !isset($_GET['token'])){
    $errors[] = 'Token not found!';
}else{
    $token = $_GET['token'];
}
//tokens table will have (id, user_id, token) coloumns
$tokenQuery = mysqli_connect($link, "SELECT * FROM tokens WHERE token = '$token' LIMIT 1");
//If I get any result with the respective token
if(mysqli_num_rows($tokenQuery) > 0){
    $tokenDetails = mysqli_fetch_assoc($tokenQuery);
    $userId = $tokenDetails['user_id'];
    /* Now you can check whether the user has Authorization to access the particular module */
    $isUserAuthorized = checkUserAuthorizationModule($userId); //Please help your self to do this all checks

    if($isUserAuthorized === TRUE){
        $customersQuery = mysqli_query($link, "SELECT * FROM customers");
        $customersDetails = [];
        if(mysqli_num_rows($customersQuery) > 0){
            while($row = mysqli_fetch_assoc($customersQuery)){
                $customersDetails[] = $row;
            }
        }

        return json_encode([
            'customerDetails' => $customersDetails
        ]);
    }
}else{
    $errors[] = 'Token is not valid';
}

return json_encode([
    'errors' => $errors
]);

有一种方法可以做到...

我要在这里发挥创意:

  1. 命中服务器上的 API 端点,传送 'username' 和 'password'。

  2. 将用户名和密码存储到此服务器上的 .txt 文件中。 txt文件的名字是时间戳'now'

  3. 在同一个服务器上,启动用户界面命令链,如下所示(使用像 xdotool 这样的库):

    • 将鼠标移动到桌面上的 mozilla 图标,
    • 双击 mozilla,
    • 将鼠标移动到地址栏,
    • 转到日历网站,
    • 移动鼠标,
    • 写下你从用户那里得到的用户名,
    • 标签,
    • 写下您从用户那里得到的密码,
    • 回车,
    • 将鼠标移动到您将日历下载到 csv 的位置(或者您可以 select,然后 ctrl-c 复制),
    • 使用鼠标,将文件保存到服务器的 public html 目录(名称与 txt 文件的名称相同)。
  4. 让客户端 web 应用不断检查该 .txt 文件中的日历信息。获取信息后,将其显示在屏幕上。

瞧。

很大程度上取决于平台的可用资源。但如果它有 PHP,你可以实现 RESTFUL 服务,使用 JSON 作为 Channaveer Hakari 响应交换数据,除了你可能不会从 mySQL 获取数据,但是流程、技术和协议是(RESTFULL 服务,交付的数据 JSON 类型,因为它可以在多种编程语言上使用。

这真的取决于云日历的交互方式。

你能告诉我们这是什么服务吗?

例如,如果它支持 OAuth,这可能是一种向该用户的服务注册您的应用程序的方式,然后允许您的应用程序将数据更新到他们的帐户。例如,当 Facebook 要求您允许第三方网站查看您的联系人并在您的墙上发帖等时,这就是 Facebook 的工作方式。这几乎是当今互联网对您的用例的实际标准。

或者,也可能是像您所说的那样,获取他们的凭据并存储它们,然后使用这些凭据连接到日历 REST API 并进行更新。从安全的角度来看,我会说这是一种糟糕的方法。任何用户都不应将其凭据提供给第三方并信任他们。这是个坏主意。这是 OAuth 存在的原因之一。

如果您正在为一家小公司构建供内部使用的小型应用程序,则仅第二种方法可能没问题。我会留给你决定。