Axios根据从前端传递的令牌获取数据

问题描述 投票:0回答:1

你们能帮我吗?我一直在尝试从Axios的URL中获取作为参数放置的token(是的,ID也包含在URL中,但对于if else,它是static条件)。我试着欺骗请求方法,但由于如果将方法设置为POST,那么它将无法正常工作,因此它将保持为POST。它不会获取,删除或更新其他任何内容。也尝试了file_get_contents,但是由于它不是POST,所以不会读取它。还尝试了stackoverflow的其他答案,但它们没有后端部分。

index.js

findSub ({ commit }, payload) {
        return new Promise((resolve, reject) => {
          axios
            .get('http://localhost/MyComposer/?id=00', {
              params: {
                token: this.state.token
              }
            })
            .then(response => {
              resolve(response)
            })
            .catch(error => {
              reject(error)
            })
        })
      },

index.php

<?php
require 'Classes/Headers.php';
require 'vendor/autoload.php';

use Classes\SubjectClass;
use Classes\TestClass;
use Classes\AnswerClass;
use Classes\LoginClass;
use Classes\TeacherClass;
use Classes\AccountClass;

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $addsubject = new SubjectClass();
    $addsubject->addSubject();
    $addtest = new TestClass();
    $addtest->addTest();
    $submitTest = new AnswerClass();
    $submitTest->submitTest();
    $submitLoginData = new LoginClass();
    $submitLoginData->submitLoginData();
    $addTeacher = new TeacherClass();
    $addTeacher->addTeacher();
    $findSub = new TeacherClass();
    $findSub->findSub();
}

if ($_SERVER["REQUEST_METHOD"] == "GET") {
    $subOptions = new SubjectClass();
    $subOptions->getSubName();
    $testOptions = new TestClass();
    $testOptions->getTest();
    $accountOp = new AccountClass();
    $accountOp->getAccount();
}

SubjectClass.php

public function getSubName {
if ($_SERVER['QUERY_STRING'] === 'id=00') {
            $data = file_get_contents('php://input');
            $tokenId = json_decode($data);
            $token = $tokenId->{'token'};

            $db->where('AccessId', $access_id);
            $subId5 = $db->get('accounts');

            if ($subId5) {
                echo json_encode($subId5);
            }
        }
}
javascript php vue.js axios vuex
1个回答
0
投票

Axios documentation ...

params是与请求一起发送的URL参数

Axios能够将URL(即?id=00)中的任何查询参数与params对象合并。使用您正在使用的客户端代码,这将导致GET请求

http://localhost/MyComposer/?id=00&token=some-token-value

无论请求类型如何,PHP都会通过$_GET超全局数组访问查询参数。这意味着只要您使用

params: { token: someTokenValue }

对于GETPOSTDELETE或任何请求方法,PHP可以通过以下方式访问令牌:>

$token = $_GET['token'] ?? null; // or whatever makes sense as a default

一些关于您的JS代码的建议...

  1. 您陷入了一种非常常见的显式承诺构造反模式。 Axios已经返回了一个承诺,因此您可以使用它。
  2. 您应该通过传递给操作的state参数而不是context访问this.state
  3. 我不会在URL和params中混合查询参数。后者要容易得多,并且可以正确编码值
  4. findSub: ({ state }) => axios.get('http://localhost/MyComposer/', {
      params: {
        id: '00',
        token: state.token
      }
    })
    
© www.soinside.com 2019 - 2024. All rights reserved.