Мой веб-сайт открыт в двух отдельных вкладках в браузере.
Я использую laravel/ui
для проверки подлинности, у меня есть тег привязки удаления, который удаляет блоги.
Когда я нажимаю Кнопка выхода из системы на одной вкладке выходит из системы. Если я ссылаюсь sh на другую вкладку, я получаю страницу входа в систему, как и ожидалось, но если я не ссылаюсь sh и я нажимаю кнопку удаления, я перехожу на страницу входа после удаления блога.
Почему я возможность выполнить действие удаления после выхода из системы, даже если в моем контроллере есть промежуточное программное обеспечение для аутентификации.
Также, если я делаю то же самое с действием добавления блога, это выдает ошибку 419 | Page Expired
, которая должна быть при удалении, как ну я думаю
И как это предотвратить.
Удалить ссылку на блог
<a href="/blogs/delete/{{ $blog->id }}" class="btn btn-danger">Delete</a>
Добавить бланк блога
<form action="/blogs" method="POST">
@csrf
...
<button type="submit">Add</button>
</form>
Маршруты
Route::get('/blogs/delete/{blog_id}', 'BlogController@delete')
->name('blogs.delete');
Route::post('/blogs', 'BlogController@store')
->name('blogs.store');
Контроллер
class BlogController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
private function checkBlogExist($blog_id)
{
// Check if blog exists
$blog = Blog::find($blog_id);
if (isset($blog)) {
return $blog;
}
else {
abort(404);
}
}
private function checkBlogBelongs($blog_id) {
// Check if blog exists
$blog = $this->checkBlogExist($blog_id);
// Check if blog belongs to auth user
$user_id = auth()->user()->id;
if ($blog->user->id == $user_id) {
return [$blog, $user_id];
}
else {
abort(403, 'Unauthorized action');
}
}
// Add Blog
public function store(Request $request)
{
// Accept user request and add blog
$fields = $request->input('blog');
$blog = new Blog;
foreach ($fields as $field => $value) {
$blog->$field = $value;
}
// Add blog info to db
// Check if user exists
$user = User::find(auth()->user()->id);
if (isset($user)) {
$user->blogs()->save($blog);
}
else {
abort(403, 'Unauthorized action');
}
return redirect()->route('home');
}
// Delete blog
public function delete($blog_id)
{
// Check if blog exists
// Check if blog belongs to user
[$blog] = $this->checkBlogBelongs($blog_id);
// Delete blog and all it's comments, likes
$blog->delete();
return back();
}
}
Обновление
Он на самом деле не удаляет его, а запрашивает учетные данные для входа.
Я входил в систему с теми же учетными данными после , что он удаляет, мой плохой, но почему добавление блога дает 419 | Page Expired
тогда как удаление выводит меня на страницу входа.
Дополнительная проблема
И если кто-то еще нажал на кнопку удаления n пока пользователь вышел из системы, отобразится страница входа, и если тот же пользователь снова войдет в систему, блог будет удален, даже если они никогда не нажимали кнопку удаления.
Действие удаления не должно выполняться после входа пользователя в систему. снова, пользователь должен нажать кнопку удаления еще раз, чтобы сделать это, или получить всплывающее окно для подтверждения.