Я разработал небольшой блог-сайт с использованием Laravel, Vuejs и Vue Router. В основном я ищу советы по передовому опыту и шаблонам проектирования, и, конечно, связанные с безопасностью вопросы, которые могут возникнуть таким образом.
Проект предназначен для личного использования и, конечно, для всех, кто может что-то искать. Похоже.
Когда я начал проект, я решил, что это всего лишь небольшое приложение на основе блога, в котором в любое время может войти только один пользователь, не использовать Laravel Passport или что-то в этом роде. Поэтому я просто добавил базовую аутентификацию laravel, чтобы пользователь мог войти в систему, а затем laravel служит просто API.
Весь сервер является приложением vuejs, поэтому вся маршрутизация и обработка данных выполняются с помощью vue. роутер и аксиос. Небольшое замечание здесь заключается в том, что JavaScript для внешнего интерфейса и внутреннего интерфейса представляют собой 2 разных файла.
Я структурировал проект так, что у меня есть группа маршрутов под присягой, которая реализует промежуточное программное обеспечение аутентификации, и этогде все для серверной части находится под, следуют из группы маршрутов, которая снова реализует промежуточное программное обеспечение аутентификации с префиксом управления и это для маршрутизатора vue для обработки маршрутизации
Auth::routes(['register' => false]);
Route::prefix('oath')->middleware('auth')->group(function () {
Route::resource('/users', 'Backend\Oath\UsersController');
Route::resource('/posts', 'Backend\Oath\Posts\PostsController');
Route::get('/posts/actions/published', 'Backend\Oath\Posts\PostActionController@published')
->name('posts.published');
Route::get('/posts/actions/drafts', 'Backend\Oath\Posts\PostActionController@drafts')
->name('posts.drafts');
Route::patch('/post/actions/{publish}/{post}', 'Backend\Oath\Posts\PostActionController@status')
->name('post.status');
Route::get('/post/markdown/images', 'Backend\Oath\Markdown \MarkdownController@index')->name('markdown.images');
Route::post('/post/markdown/upload', 'Backend\Oath\Markdown\MarkdownController@upload')->name('markdown.upload');
Route::delete('/post/markdown/{image}', 'Backend\Oath\Markdown\MarkdownController@destroy')->name('markdown.destroy');
Route::resource('/categories', 'Backend\Oath\CategoriesController');
Route::resource('/subscribers', 'Backend\Oath\SubscribersController');
Route::resource('/socialAccount', 'Backend\Oath\SocialAccountsController');
Route::get('/search/{term}', 'Backend\Oath\Posts\SearchController')->name('search.title');
});
Route::prefix('manage')->middleware('auth')->group(function () {
Route::get('/{any}', 'Backend\DashboardController@index')->where('any', '.*');
});
Затем я последовал аналогичномуподход для внешнего интерфейса, в котором под api находится весь материал, связанный с данными, и один маршрут в {any}, который исключает / api через регулярное выражение и который обрабатывает маршрутизацию.
Route::prefix('api')->group(function () {
Route::get('/index', 'Frontend\CategoriesController@index')->name('index');
Route::get('/categories', 'Frontend\CategoriesController@fetchCategories')->name('categories');
Route::get('/{name}/posts', 'Frontend\CategoriesController@posts')->name('category.posts');
Route::get('/post/{slug}', 'Frontend\CategoriesController@post')->name('post');
Route::post('/subscribers', 'Frontend\SubscribersController@submit')->name('subscribers.submit');
Route::post('/subscribers/cancel/{email}/{token}', 'Frontend\SubscribersController@cancel')
->name('subscribers.cancel');
});
Route::get('/{any}', 'Frontend\MainController@index')->where('any', '^(?!api).*$');
У меня естьЯ действительно не видел, чтобы кто-то использовал такой подход для решения аналогичной проблемы, поэтому мне было интересно, будет ли лучше добавить просто Passport или любую аутентификацию на основе ключей для API-вызовов на стороне сервера.