代码之家  ›  专栏  ›  技术社区  ›  Dhiraj

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

  •  6
  • Dhiraj  · 技术社区  · 8 年前

    任何帮助/建议/指导都将不胜感激。即使这个问题不具体,也试着容忍我。

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

    我几乎是一片空白,因为在如何访问单独的应用程序和获取数据方面,我找不到任何有用的资源。 我知道我必须构建某种API来与该系统通信,但我不知道具体如何实现。

    对不起,如果我说不通的话,但我真的需要一些帮助。有没有提供类似功能的库?我该怎么开始呢?我使用PHP作为服务器端语言。

    4 回复  |  直到 8 年前
        1
  •  2
  •   Marco    8 年前

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

        2
  •  2
  •   Mark    8 年前

    这实际上取决于云日历的交互方式。

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

    如果你正在为一家小公司开发一个小型应用程序供内部使用,那么只有第二种方法可能是好的。我将由你决定。

        3
  •  1
  •   Farzad Karimi    8 年前
    1. 单击按钮->重定向到登录表单

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

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

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

    1. 身份验证API返回经过身份验证的数据。基于此,您可以继续执行操作。

    2. 如果成功,那么您将被授予访问权限,现在可以将数据插入数据库。

    3. 要从另一个数据库表中读取数据,由于您没有必要的权限,因此无法直接访问它。对相应的函数进行API调用,以获取所有必要的数据,无论是get、POST、PUT、DELETE还是PATCH。

    学习如何编写API的

    如:

    相同的

    设想一下,如果您确实收到了获取客户详细信息的请求,那么您可以执行以下操作

    http://127.0.0.1/project/getCustomers.php?token=2fdsd5f42314sfd85sds

    获取客户。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
    ]);
    
        4
  •  1
  •   quelquecosa    8 年前

    我要在这里发挥创意:

    1. 点击服务器上的API端点,传递“用户名”和“密码”。

    2. txt文件的名称是时间戳“now”

    3. 在同一台服务器上,启动一系列用户界面命令,如下所示(使用xdotool之类的库):

      • 将鼠标移动到桌面上的mozilla图标,
      • 双击mozilla,
      • 转到日历网站,
      • 移动鼠标,
      • 写下你从用户那里得到的密码,
      • 点击回车键,
      • 使用鼠标将文件保存到服务器的公共html目录中(与上面的txt文件同名)。

    推荐文章