【发布时间】: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->can("...)),脚本就会失败。
你知道如何解决这个问题吗?
【问题讨论】:
-
dd($user->can('store files'))返回什么? -
请将代码发布为文本而不是图像,以便我们正确调试
-
@Makdous 我已经粘贴了代码
-
@Spholt 抛出同样的错误,它什么也不返回
-
好的,可以试试
dd($user)吗?如果它返回一个用户实例,那么问题可能出在您的策略或中间件中。然后我们可以从那里继续前进
标签: php laravel apache amazon-ec2 server