首页 > 解决方案 > Laravel ``$user->can("...")`` 抛出服务器错误 500

问题描述

我在 AWS (EC2) 上使用 Laravel API 托管 SPA。当您填写此表单时:http ://ec2-52-59-214-55.eu-central-1.compute.amazonaws.com/register (随意这样做),服务器会抛出一个错误并响应代码 500,就在$user->can("...")调用方法的地方。我在本地开发了该应用程序,并且在那里一切正常。

当地环境:

Windows 10 / XAMPP - Apache 2.4.41
PHP 7.4.4
Laravel 7.5.2

服务器环境:

Ubuntu 18.04 / Apache 2.4.29
PHP 7.4.6
Laravel 7.5.2

它使用 spatie/laravel-permission 进行角色管理,这也影响can了 Laravel 框架提供的方法。

这是导致错误的代码:

echo "Before store<br>";

        if($user->can("store files")) {                                                                                                                                                                                                                      echo "Inner store";

            // Store avatar
            if(isset($data["avatar"])) {
                if(!$data["avatar"]->isValid()) {
                    return reponse(null, 422);
                }

                // Check if avatar is new
                $current_avatar = $user->getAvatarAttribute();
                $store_images = get_new_files([$data["avatar"]], [$current_avatar]);


                if(isset($store_images[0])) {
                    // Create asset for avatar
                    $new_avatar = create_asset([
                        "file" => $store_images[0],
                        "user_id" => $user->id,
                        "type" => "avatar"
                    ]);

                    $new_avatar->save();
                }
            }
        }

        echo "After store<br>";

我猜这里的错误意味着脚本if($user->can("...))一被调用就失败了。

你知道如何解决这个问题吗?

标签: phplaravelapacheamazon-ec2server

解决方案


日志记录错误相当普遍,尤其是在配置为每日日志时。

https://laravel.com/docs/7.x/logging#configuration

请特别查看“配置单一频道和每日频道”部分,因为这允许在创建时设置日志文件的权限。

您可以暂时更改日志的权限,如下所示:

sudo chmod 644 storage/log/.

推荐阅读