Предложения по внедрению Laravel Passport / Любой ключ на основе аутентификации или нет - PullRequest
0 голосов
/ 01 ноября 2019

Я разработал небольшой блог-сайт с использованием 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-вызовов на стороне сервера.

...