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'; 
});

Надеюсь, это даст вам представление.

Другие вопросы по тегам