electronhttp-postyii2-api

Unable to pass post variables in http request from Electron to Yii API


I want to make API (Get & Post) requests to an API build with Yii2 using Electron. I have tried Axion, Fetch, HTTP, request modules and all of them gave me the same error:

data: { name: 'PHP Notice', message: 'Undefined index: username', code: 8, type: 'yii\base\ErrorException', file: 'C:\xampp\htdocs\app\controllers\ApiController.php', line: 898, 'stack-trace': [Array] }

Here is the code for the action I want to call:

public function actionLogin(){
  if(Yii::$app->request->isPost){
    Yii::$app->response->format = Response::FORMAT_JSON;
    $data = Yii::$app->request->post();
    $username = $data['username'];
    $password = $data['password'];
    $device_token = $data['device_token'];
    $prefix = substr($username, 0, 3);
    $model = null;
    }
}

And here is the code in Electron:

axios.post('http://localhost:8080/app/api/login', {
    username: 'Fred',
    psssword: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  });

For some reason, the parameters are not passing to the action. I have tried a lot of ways and this one seems to be the simplest. P.S. all of the way I have tried gave the same error.


Solution

  • I have found the solution for this issue, the way it worked was:

    const login = async(username, password)=>{
          const data = new URLSearchParams();
          data.append('username', username);
          data.append('password', password);
          data.append('device_token', 'null');
    
          await fetch(`http://localhost:8080/app/api/login`,{
                  method: 'post',
                  body: data
            })
            .then(res => res.json())
            .then(data => {
                if(data.status){
                  ipcRenderer.send('user:login', data.data.user_type, data.data.access_token);
                }
                else{
                  document.querySelector('#message').innerText = 'Wrong password or username';
                  document.querySelector('#message').style.display = 'block';
                }
    
            })
        }