Краткая версия: как лучше всего отправить JWT, сгенерированный из входа в Facebook (laravel / socialite), во внешний интерфейс angularjs без использования сеанса.
Длинная версия. Я делаю приложение с интерфейсом angularjs и сервером laravel 5.2. Я использую tymondesigns / jwt-auth для аутентификации вместо сеанса.
Я также использую laravel / socialite для аутентификации в социальной сети Facebook. Для этого я использую функцию «Socialite» без сохранения состояния, поэтому сеанс мне не нужен.
Базовая аутентификация работает отлично. Но когда я пытаюсь использовать вход в Facebook, я выполняю следующие действия.
- Пользователь нажимает кнопку на стороне angular, которая перенаправляет на страницу входа поставщика серверной части.
public function redirectToProvider() {
return Socialite::with('facebook')->stateless()->redirect();
}
2. Пользователь предоставляет свои данные для входа. После входа в систему он перенаправляется на мою функцию handlecallback.
try {
$provider = Socialite::with('facebook');
if ($request->has('code')) {
$user = $provider->stateless()->user();
}
} catch (Exception $e) {
return redirect('auth/facebook');
}
return $this->findOrCreateUser($user);
Затем я использую функцию findorcreate, чтобы определить, существует пользователь или нет. Если нет, то я просто создаю нового пользователя и создаю из него JWT.
$user = User::where('social_id', '=', $facebookUser->id)->first(); if (is_object($user)) { $token = JWTAuth::fromUser($user); return redirect()->to('http://localhost:9000/#/profile?' . 'token=' . $token);#angular } else { $result = array(); $result['name'] = $facebookUser->user['first_name'] $result['email'] = $facebookUser->user['email']; $result['social_id'] = $facebookUser->id; $result['avatar'] = $facebookUser->avatar; $result['gender'] = $facebookUser->user['gender']; $result['status'] = 'active'; $result['login_type'] = 'facebook'; $result['user_type'] = 'free_user'; try { $user = User::create($result); } catch (Exception $e) { return response()->json(['error' => 'User already exists.'], HttpResponse::HTTP_CONFLICT); } $token = JWTAuth::fromUser($user); return redirect()->to('http://localhost:9000/#/profile?' . 'token=' . $token);#angular }
Моя проблема в том, что в последнем блоке кода мне нужно отправить jwt на мой интерфейс через URL-адрес. Что совсем небезопасно. Каким будет правильный способ отправить сгенерированный JWT во внешний интерфейс без использования сеанса. Спасибо