【问题标题】:Laravel ``$user->can("...")`` throws server error 500Laravel ``$user->can("...")`` 抛出服务器错误 500
【发布时间】:2020-09-03 03:27:16
【问题描述】:

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

本地环境:

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 进行角色管理,这也影响了 Laravel 框架提供的can 方法。

这是导致错误的代码:

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-&gt;can("...)),脚本就会失败。

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

【问题讨论】:

  • dd($user-&gt;can('store files')) 返回什么?
  • 请将代码发布为文本而不是图像,以便我们正确调试
  • @Makdous 我已经粘贴了代码
  • @Spholt 抛出同样的错误,它什么也不返回
  • 好的,可以试试dd($user)吗?如果它返回一个用户实例,那么问题可能出在您的策略或中间件中。然后我们可以从那里继续前进

标签: php laravel apache amazon-ec2 server


【解决方案1】:

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

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

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

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

sudo chmod 644 storage/log/.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多