Search code examples
laravellumen

Lumen Passport return 500 except successfully log in request


I've created Lumen Passport in my local and free Heroku and successfully created it. Now I’m creating my production lumen in digital ocean VPS. All of my applications work fine and give good bad responses format when it should be failed responses, except my login. In my login, it passes a good response when correct emails and passwords but returns 500 in other cases.

This is my code in my LoginService.php

public function generate_token($email, $password){
    // $token = Http::post(config('service.passport.login_endpoint'), [
    //     'grant_type' => 'password',
    //     'client_id' => config('service.passport.client_id'),
    //     'client_secret' => config('service.passport.client_secret'),
    //     'username' => $email,
    //     'password' => $password,
    // ]);

    // return $token->json();
    $http = new Client;
    try {
        $response = $http->post(config('service.passport.login_endpoint'), [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('service.passport.client_id'),
                'client_secret' => config('service.passport.client_secret'),
                'username' => $email,
                'password' => $password,
            ]
        ]);
        return [true, $response->getBody()];
    } catch (ClientException $e) {
        $response = $e->getResponse();
        $responseBodyAsString = $response->getBody()->getContents();
        return [false, Psr7\str($e->getResponse())];
        // return $responseBodyAsString;
    }
}

public function login($email, $password){
    $login = $this->generate_token($email, $password);

    // if(isset($login['error'])){
    //     $response = [
    //         "success" => false, 
    //         "message" => (object)[
    //             "errorInfo" => [
    //                 "status" => 401,
    //                 "reason" => $login['error'],
    //                 "server_code" => 401,
    //                 "status_detail" => $login['error_description']
    //             ]
    //         ],
    //         "status" => 401
    //     ];
    // } else {
    //     $response = [
    //         "success" => true,
    //         "data" => [
    //             "message" => "success generate token",
    //             "token" => $login['access_token']
    //         ],
    //         "status" => 200
    //     ];
    // }
    if($login[0]){
        $response = [
            "success" => true,
            "data" => json_decode($login[1]),
            "status" => 200
        ];
    } else {
        $response = [
            "success" => true,
            "data" => $login[1],
            "status" => 200
        ];
    }


    return $response;
}

This is my error log from my server

2022/02/08 09:11:58 [error] 61359#61359: *4187 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught UnexpectedValueException: The stream or file "/var/www/html/ims/storage/logs/lumen-2022-02-08.log" could not be opened in append mode: failed to open stream: Permission denied in /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:111
Stack trace:
#0 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(121): Monolog\Handler\StreamHandler->write()
#1 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(42): Monolog\Handler\RotatingFileHandler->write()
#2 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Logger.php(317): Monolog\Handler\AbstractProcessingHandler->handle()
#3 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Logger.php(539): Monolog\Logger->addRecord()
#4 /var/www/html/ims/vendor/illuminate/log/Logger.php(174): Monolog\Logger->error()
#5 /var/www/html/ims/vendor/illuminate/log/Logger.php(87): Illuminate\Log\Logger->writeLog()
#6 /var/www/html/...PHP message: PHP Fatal error:  Uncaught UnexpectedValueException: The stream or file "/var/www/html/ims/storage/logs/lumen-2022-02-08.log" could not be opened in append mode: failed to open stream: Permission denied in /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:111
Stack trace:
#0 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(121): Monolog\Handler\StreamHandler->write()
#1 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(42): Monolog\Handler\RotatingFileHandler->write()
#2 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Logger.php(317): Monolog\Handler\AbstractProcessingHandler->handle()
#3 /var/www/html/ims/vendor/monolog/monolog/src/Monolog/Logger.php(539): Monolog\Logger->addRecord()
#4 /var/www/html/ims/vendor/illuminate/log/Logger.php(174): Monolog\Logger->error()
#5 /var/www/html/ims/vendor/illuminate/log/Logger.php(87):

This is my permission and user list in my storage and logs

root@mighty-app-1:/var/www/html/ims# ll
total 444
drwxr-xr-x 14 root www-data   4096 Feb  7 23:30 ./
drwxr-xr-x  4 root root       4096 Feb  3 17:17 ../
-rw-r--r--  1 root root        220 Feb  7 07:14 .editorconfig
-rwxr-xr-x  1 root root        586 Feb  7 23:30 .env*
-rw-r--r--  1 root root        293 Feb  7 07:14 .env.example
drwxr-xr-x  8 root www-data   4096 Feb  8 07:12 .git/
-rw-r--r--  1 root root         87 Feb  7 07:14 .gitignore
-rw-r--r--  1 root root         71 Feb  7 07:14 .styleci.yml
drwxr-xr-x  2 root www-data   4096 Feb  7 07:14 .vscode/
-rw-r--r--  1 root root        121 Feb  7 07:14 Procfile
-rw-r--r--  1 root root       1585 Feb  7 07:14 README.md
drwxr-xr-x 13 root www-data   4096 Feb  7 07:14 app/
-rwxr-xr-x  1 root root       1094 Feb  7 07:14 artisan*
drwxr-xrwx  2 root www-data   4096 Feb  7 07:14 bootstrap/
-rw-r--r--  1 root root       1463 Feb  7 07:14 composer.json
-rw-r--r--  1 root root     355645 Feb  7 07:14 composer.lock
drwxr-xr-x  2 root www-data   4096 Feb  7 07:14 config/
drwxr-xr-x  5 root www-data   4096 Feb  3 17:01 database/
-rw-r--r--  1 root root        756 Feb  7 07:14 phpunit.xml
drwxr-xr-x  3 root www-data   4096 Feb  8 07:12 public/
drwxr-xr-x  3 root www-data   4096 Feb  3 17:01 resources/
drwxr-xr-x  2 root www-data   4096 Feb  7 07:14 routes/
drwxr-xrwx  5 root www-data   4096 Feb  7 07:14 storage/
drwxr-xr-x  2 root www-data   4096 Feb  7 07:14 tests/
drwxr-xr-x 60 root root       4096 Feb  4 03:49 vendor/
root@mighty-app-1:/var/www/html/ims# cd storage
root@mighty-app-1:/var/www/html/ims/storage# ll
total 36
drwxr-xrwx  5 root www-data 4096 Feb  7 07:14 ./
drwxr-xr-x 14 root www-data 4096 Feb  7 23:30 ../
-rw-r--r--  1 root root     6148 Feb  7 07:14 .DS_Store
drwxr-xrwx  2 root www-data 4096 Feb  7 07:14 app/
drwxr-xrwx  4 root www-data 4096 Feb  7 07:14 framework/
drwxr-xrwx  2 root www-data 4096 Feb  7 10:24 logs/
-rw-r--r--  1 root root     3292 Feb  7 23:30 oauth-private.key
-rw-r--r--  1 root root      812 Feb  7 23:30 oauth-public.key
root@mighty-app-1:/var/www/html/ims/storage# cd logs/
root@mighty-app-1:/var/www/html/ims/storage/logs# ll
total 108
drwxr-xrwx 2 root www-data  4096 Feb  7 10:24 ./
drwxr-xrwx 5 root www-data  4096 Feb  7 07:14 ../
-rw-r--r-- 1 root root        14 Feb  7 07:14 .gitignore
-rwxr-xrwx 1 root root     93743 Feb  4 11:13 lumen-2022-02-04.log*
root@mighty-app-1:/var/www/html/ims/storage/logs# 

I've tried some ways to check whether the responses couldn't be read or something, but it seems that there's something missing that I couldn't get.

I didn’t find other similar cases with my case other than this Lumen Passport return 500 error instead 401 error but this also couldn’t solve my problem.

Can anyone give me some tips for me? Thanks in advance


Solution

  • After some time searching for answer, the problem was because my storage folder had root user permission. And it solved by giving the user and group permission to www-data with command like this

    sudo chown -R www-data:www-data /var/www/<project_name>/storage
    

    Special thanks to @Peppermintology for giving me many hints