Я использую Lumen 5.1, Angular 6 и Google PHP API-клиент ^ 2.0. Я пытаюсь использовать Gsuite admin SDK, каталог API. Я не использую jwt, когда пользователь входит в систему, он получает x-session
В настоящее время LoginAction.php
выглядит так
private function loginUser()
{
if ($this->request->input('token') != null) {
$user_token = UserDevice::where('token', $this->request->input('token'))->with('user')->first();
if ($user_token != null) {
$username = $user_token->user->username;
} else {
$this->response->addErrorDialog('framework::auth.general.login_token_invalid');
return $this->response->statusFail();
}
} else {
$username = $this->username;
}
$credentials = array(
'username' => $username,
'password' => $this->request->input('password')
);
if (!$this->checkFailedLogin($credentials["username"])) {
$this->updateFailedLogin($credentials["username"]);
$this->response->addErrorDialog('framework::auth.general.login_attempts_reached');
return $this->response->statusFail('You reached the maximum number of login attempts!');
}
if (\Auth::attempt($credentials)) {
$user = \Auth::user();
$requiredResourceId = null;
$requiredRole = $this->request->input('role', null);
if ($requiredRole != null) {
if (!$user->inRole($requiredRole)) {
$this->response->addErrorDialog('framework::auth.general.login_failed');
return $this->response->statusFail();
}
$resourceIds = $user->getResourceId($requiredRole);
$minLevel = 1000;
foreach ($resourceIds as $resourceId) {
if ($resourceId->level < $minLevel) {
$minLevel = $resourceId->level;
$requiredResourceId = $resourceId->resource_id;
$requiredRole = $resourceId->name;
}
}
\Session::put('resource_id', $requiredResourceId);
\Session::put('role', $requiredRole);
}
$should_validate = 0;
if (config('auth.email_verification') && $user->validated == 0) {
$this->response->addErrorDialog('framework::auth.general.email_confirmation_required', '');
$should_validate = BaseAction::EMAIL_VALIDATION_ONLY;
}
// update last login
$this->updateLastLogin($user);
$this->loadRelations($user);
$this->resetLoginAttempts($user);
// Signout from other devices if necessary
if (!config('auth.multiple_sessions_per_user')) {
$this->signoutDevices($user);
}
if (\Session::has('device_id')) {
$this->attachDevice($user, \Session::get('device_id'));
}
$this->user = $user;
$userdevice = UserDevice::firstOrCreate([
'user_id' => $this->user->id,
'device_id' => \Session::get('device_id')
]);
if (config('auth.device_validation') && $userdevice->validated == 0) {
$this->response->addErrorDialog('framework::auth.general.email_confirmation_required', '');
$should_validate = BaseAction::EMAIL_VALIDATION_ONLY;
}
$user_remember_token = null;
$passcode = null;
if ($this->request->get('remember_user', 0) == 1) {
$remember_token = str_random(100);
$passcode = str_random(100);
$mask = preg_replace("/\S/", "*", $this->user->username);
$mask = substr($mask, 1, -1);
$masked_user = substr_replace($this->user->username, $mask, 1, -1);
$user_remember_token = $masked_user . ':' . $remember_token;
$userdevice->token = $user_remember_token;
$userdevice->passcode = $passcode;
$userdevice->save();
}
return $this->response->statusOk([
'user' => $user,
'role' => $requiredRole,
'resource_id' => $requiredResourceId,
'should_validate' => $should_validate,
'remember_token' => $user_remember_token,
'passcode' => $passcode
]);
} else {
$this->updateFailedLogin($credentials["username"]);
$this->response->addErrorDialog('framework::auth.general.login_failed');
return $this->response->statusFail('framework::auth.general.login_failed');
}
}
Google API должен быть реализован так
<?php require ("vendor/autoload.php");
//Step 1: Enter you google account credentials
$g_client = new Google_Client();
$g_client->setClientId("635746243599-n4uqgio77g1lgbkgkmjajoogd49o7e7k.apps.googleusercontent.com");
$g_client->setClientSecret("Hgq0sN65ue-0E4dyGsS0WZlJ");
$g_client->setRedirectUri("http://localhost/sign_in/google.php");
$g_client->setScopes("email");
//Step 2 : Create the url
$auth_url = $g_client->createAuthUrl();
echo "<a href='$auth_url'>Login Through Google </a>";
//Step 3 : Get the authorization code
$code = isset($_GET['code']) ? $_GET['code'] : NULL;
//Step 4: Get access token
if(isset($code)) {
try {
$token = $g_client->fetchAccessTokenWithAuthCode($code);
$g_client->setAccessToken($token);
}catch (Exception $e){
echo $e->getMessage();
}
try {
$pay_load = $g_client->verifyIdToken();
}catch (Exception $e) {
echo $e->getMessage();
}
} else{
$pay_load = null;
}
if(isset($pay_load)){
// do something
}
Как реализовать гугл в loginAction.php
? Я не могу просто взять токен и предположить, что он пришел с сервера.
По сути, это одна из проблем, я не могу найти пример того, как интегрировать Google Api с существующим приложением lumen.
Вторая проблема, с которой я столкнулся, заключается в том, что я не знаю, как это назвать с помощью angular, я успешно angular social login , но я чувствую, что мне это не нужно, думаю, мне следует подписаться на него, как я, чтобы войти, но я не уверен.
Нужно ли реализовывать google api из бэкэнда и внешнего интерфейса? Или только бэкэнд и подписаться на ответ от внешнего интерфейса? Библиотеки, подобные той, которую я использовал, не нужны?