Я прочитал ответ по @ceejayoz
, и он выглядит хорошо
Но если вы используете приложение небольшого масштаба и вам не нужно реализовывать политики authorization
, то есть способ
Проблемы в вашем hidden attribute
. Он будет доступен для чтения пользователем с помощью view::source
или даже может inspect
на странице и rewrite
it
Решение
Что мы делаем
Шифрование post_id
в скрытом атрибуте формы и decrypting it the controller
За документами по шифрованию обращайтесь https://laravel.com/docs/5.8/encryption
Выполните шаги
Просмотры
С
<input type="hidden" name="post_id" value="{{$post->id}}" >
К
<input type="hidden" name="post_id" value="{{Crypt::encrypt($post->id)}}" >
Теперь post_id
зашифрован в виде
Контроллер
Добавьте это пространство имен в начало контроллера
use Illuminate\Support\Facades\Crypt;
use Illuminate\Contracts\Encryption\DecryptException;
Добавьте эту функцию к вашему контроллеру
public function decryptId($encryptedId='',$message='Not Found',$statusCode=404)
{
try {
$decrypted =Crypt::decrypt($encryptedId);
return $decrypted;
} catch (DecryptException $e)
{
abort($statusCode,$message);
}
}
и вашему storeComment
public function storeComment(request $request)
{
$postIdEncrypted = $request->post_id;
$postIdDecrypted = self::decryptId($postIdEncrypted);
$post = $postIdDecrypted;
$id = Auth::id();
Comment::create([
'body' => $request->body,
'user_id' => $id,
'post_id' => $post
]);
return redirect('/');
}
Надеюсь, это поможет