Laravel 6 Может выполнять ограниченные действия пользователя даже после выхода из системы - PullRequest
1 голос
/ 03 марта 2020

Мой веб-сайт открыт в двух отдельных вкладках в браузере.

Я использую 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 пока пользователь вышел из системы, отобразится страница входа, и если тот же пользователь снова войдет в систему, блог будет удален, даже если они никогда не нажимали кнопку удаления.

Действие удаления не должно выполняться после входа пользователя в систему. снова, пользователь должен нажать кнопку удаления еще раз, чтобы сделать это, или получить всплывающее окно для подтверждения.

...