Laravel Passport между двумя проектами Laravel
У меня есть одна большая борьба.
Я пытаюсь создать два сайта Laravel. Один для внешнего интерфейса и один для внутреннего интерфейса. Бэкэнд предоставит интерфейсную информацию, сгенерированную API. Единственное, что мне трудно, это создать Auth и Guard для внешнего интерфейса. В сети есть много обучающих программ, как сделать систему на одном проекте Laravel, но не на двух, а на разных хостингах.
Я установил бэкэнд по этой документации: https://laravel.com/docs/5.5/passport Я тестирую его, и все выглядит хорошо.
Проблема заключается в совместимости с внешним интерфейсом. Я хочу избавиться от аутентификации базы данных и использовать токены паспорта: /
У кого-нибудь есть проекты или учебники, на которые я могу посмотреть? Спасибо!
1 ответ
Создать users(id, created_at, updated_at)
стол и User
модель в интерфейсе
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Models\Helpers\ModelHelper;
use Auth;
class User extends Authenticatable
{
//here $userData we will get from backend server
public static function createAuth($userData){
$user = new User();
$user->name = $userData['name'];
//all other fields
Auth::login($user);
return $user;
}
}
После этого создайте действие входа в систему во внешнем интерфейсе, а также создайте имя входа на бэкэнд-сервере, а затем создайте личный токен доступа на бэкэнд-сервере и верните его как ответ json
Действие входа в Backend
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['user'] = $user;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
Вход в Frontend
public function login(Request $request)
{
$http = new GuzzleHttp\Client;
$response = $http->post('http://backend.local/api/login', [
'headers' => [
'Accept' => 'application/json',
],
'form_params' => [
'email' => 'username@example.vom',
'password' => '123',
]
]);
$info = json_decode((string) $response->getBody(), true);
$request->session()->put('authUser', $info['success']['user']);
\App\User::createAuth($info['success']['user']);
return redirect('/');
}
Создать собственное промежуточное ПО RemoteAuth
namespace App\Http\Middleware;
use Illuminate\Auth\AuthenticationException;
use Closure;
use Auth;
use App\User;
class RemoteAuth
{
public function handle($request, Closure $next)
{
if (!empty(session('authUser'))) {
$user = $request->session()->get('authUser');
User::createAuth($user);
return $next($request);
}
return redirect('/login');
}
}
Зарегистрируйте это промежуточное ПО в Kernel.php
в protected $routeMiddleware
раздел.
'remoteAuth' => \App\Http\Middleware\RemoteAuth::class
Теперь используйте это remoteAuth
промежуточное ПО в Route
Route::middleware('remoteAuth')->get('/test', function (Request $request) {
return 'Protected page';
});
Надеюсь, это даст вам представление.