У меня есть полностью готовый проект, сделанный с задним концом Laravel и передним концом реакции.Приложение реагирования обернуто в код Laravel и будет доступно только после входа в систему и некоторых выборов, которые все выполняются в laravel с его представлениями.Я хочу сделать приложение реагировать как отдельное приложение и превратить код laravel в API, который подается с сервера через.URL-адрес, такой, что приложение реагирует, отправляя запросы к API-интерфейсу laravel.
Итак, моя первая проблема заключается в следующем: существует ли способ реализовать API для моего кода laravel, который имитирует мою уже существующую реализацию входа в систему??
Поскольку мой вопрос довольно широкий, я не был уверен, какой код предоставить для этого вопроса.Код соответствует шаблону проектирования MVC, поэтому не стесняйтесь спрашивать некоторые части кода.
В качестве небольшого вопроса не по теме (не читайте это, если вы просто хотите помочь с вещами laravel)Причина, по которой я хочу отделить внутреннюю часть laravel и приложение переднего плана реагирования, заключается в том, чтобы обернуть приложение реагирования в электронное, чтобы сделать его автономным приложением с использованием внутреннего интерфейса laravel.Является ли это разумным подходом?
Редактировать: я обнаружил, что суть проблемы заключается в том, как выполнить «стиль API» входа в систему по сравнению с формой входа, которую предоставляет laravel.Поэтому я думаю, что мне нужно реализовать вход в систему с помощью laravel Passport, чтобы получить пользователя с учетными данными, совпадающими с данными, полученными при входе через форму входа в систему laravel.Но мне трудно понять логику в форме входа в систему laravel, поэтому я мог бы помочь, как это сделать.
Ниже приведен код моего контроллера входа и связанное промежуточное программное обеспечение.Опять же, скажите, если вам нужен больше кода.
Контроллер входа (из App / http / controllers / auth):
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|---------------------------------------------------------------------
| Login Controller
|------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
Middleware (из App / http / Kernel.php):
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware \AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
Edit-2:
Вот код для моих маршрутов web.php:
<?php
/*
|---------------------------------------------------------------
| Web Routes
|----------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Auth::routes();
Route::get('/', 'HomeController@index')->name('home');
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/setlocale/{locale}', function (Request $request, $locale) {
if (in_array($locale, \Config::get('app.locales'))) {
session()->put('locale', $locale);
}
return redirect()->back();
});
Route::get('/profile', 'UserController@show')->name('profile');
Route::patch('/profile', 'UserController@update')->name('users.update');
Route::get('/scan', 'HomeController@index')->name('scan.index');
Route::get('/scan/new', 'ScanController@new')->name('scan.new');
Route::get('/scan/{id}', 'ScanController@show')->name('scan.show');
Route::post('/scan', 'ScanController@create')->name('scan.create');
Route::patch('/scan/{id}', 'ScanController@update')->name('scan.update');
Route::delete('/scan/{id}', 'ScanController@destroy')->name('scan.destroy');
// save SCAN JSON
Route::post('/scan/{id}/save', 'ScanController@save')->name('scan.save');
Edit 3:
ПервоеКогда я создаю токен доступа, то, что хранится в / oauth / personal-access-tokens, выглядит следующим образом:
0:
client:
created_at: "2019-01-04 13:00:48"
id: 3
name: "SCAN Personal Access Client"
password_client: false
personal_access_client: true
redirect: "http://localhost"
revoked: false
updated_at: "2019-01-04 13:00:48"
user_id: null
__proto__: Object
client_id: 3
created_at: "2019-01-15 13:52:22"
expires_at: "2020-01-15 13:52:22"
id: "0321b2d622bd7267273225a64cf6f1723cc74b86076831432fb5af4885051c6776bb8ea77c0d7407"
name: "MyApp"
revoked: false
scopes: []
updated_at: "2019-01-15 13:52:22"
user_id: 1
__proto__: Object
В первом клиенте, созданном в 13:00:48, uder_idноль.Это проблема?
Во-вторых, вот как я пытаюсь сделать запрос, используя axios, используя функцию login для получения токена доступа (и я получаю токен доступа), и мой API работает на localhost: 4321
login = async () => {
return axios.post('http://localhost:4321/api/login', {
grant_type: 'password',
client_id: 5,
client_secret: 'd3zuZL6KbBI4DOq4Z7NQkP1ezrAj5GMjgo39',
email: 'my mail, used to login',
password: 'my password',
scope: '',
})
}
async componentDidMount() {
const accessTokenData = await this.login();
var config = {
headers: {
Authorization: "bearer " + accessToken
},
grant_type: 'password',
client_id: 'PassGrantClient',
client_secret: 'd3zuZL6KbBI4zsDOq4Z7NQkP1ezrAj5GMjgo39',
scope: '',
};
axios.post(
'http://localhost:4321/api/getInterview',
{},
config
).then((response) => {
console.log(response)
})
}
Где маршрут getInterview указывает на функцию
public function getInterview()
{
$user = Auth::user();
return response()->json($user);
}
, которая возвращает 401. Как видите, яне уверен что поставить куда :).Если вам нужно больше кода, не стесняйтесь спрашивать:).