cfmgrv4 init...2
This commit is contained in:
parent
d18f24981c
commit
07ad2b075f
@ -83,6 +83,7 @@ class UserController extends FrontController
|
||||
helper(['form']);
|
||||
$this->create_form_process();
|
||||
$this->session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
|
||||
$this->google_url = getenv('socket.google.api.uri');
|
||||
$this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []];
|
||||
return view(
|
||||
$this->view_path . "login",
|
||||
@ -120,12 +121,11 @@ class UserController extends FrontController
|
||||
}
|
||||
public function google_login(): RedirectResponse|string
|
||||
{
|
||||
$this->init('login');
|
||||
$this->init('login');
|
||||
//Transaction Start
|
||||
$this->getModel()->transStart();
|
||||
try {
|
||||
$auth = new GoogleAuth();
|
||||
$auth = new GoogleAuth($this->request->getVar('code'));
|
||||
$auth->setLogin($auth->checkUser());
|
||||
$this->message = "로그인 성공";
|
||||
$this->getModel()->transCommit();
|
||||
|
||||
@ -2,37 +2,40 @@
|
||||
|
||||
namespace App\Libraries\MyAuth;
|
||||
|
||||
use \Google\Service\Oauth2;
|
||||
use Google\Service\Oauth2;
|
||||
use App\Models\UserModel;
|
||||
use App\Models\SNSUserModel;
|
||||
use App\Libraries\MySocket\GoogleSocket;
|
||||
use App\Entities\UserEntity;
|
||||
use CodeIgniter\Exceptions\PageNotFoundException;
|
||||
|
||||
class GoogleAuth extends MyAuth
|
||||
{
|
||||
private $_mySocket = null;
|
||||
private $_site = "GOOGLE";
|
||||
private $_model = null;
|
||||
public function __construct()
|
||||
private ?GoogleSocket $_mySocket = null;
|
||||
private string $_site = "GOOGLE";
|
||||
private ?SNSUserModel $_model = null;
|
||||
private string $access_code = "";
|
||||
public function __construct(string $access_code)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->access_code = $access_code;
|
||||
}
|
||||
|
||||
public function getMySocket(): GoogleSocket
|
||||
{
|
||||
if ($this->_mySocket === null) {
|
||||
$this->_mySocket = new GoogleSocket();
|
||||
$this->_mySocket->setMyToken();
|
||||
$this->_mySocket->setToken($this->access_code);
|
||||
}
|
||||
return $this->_mySocket;
|
||||
}
|
||||
|
||||
public function getAuthButton()
|
||||
public function getAuthButton(): string
|
||||
{
|
||||
$button = "";
|
||||
if (!$this->getMySocket()->getMyToken()) {
|
||||
if (!$this->getMySocket()->getToken()) {
|
||||
$button = anchor(
|
||||
getenv("socket.google.api.url"),
|
||||
env("socket.google.api.url"),
|
||||
ICONS['GOOGLE'],
|
||||
["target" => "_self"]
|
||||
);
|
||||
@ -40,10 +43,10 @@ class GoogleAuth extends MyAuth
|
||||
return $button;
|
||||
}
|
||||
|
||||
final protected function getModel(): SNSUSerModel
|
||||
final protected function getModel(): SNSUserModel
|
||||
{
|
||||
if ($this->_model === null) {
|
||||
$this->_model = new SNSUserModel();
|
||||
$this->_model = model(SNSUserModel::class);
|
||||
}
|
||||
return $this->_model;
|
||||
}
|
||||
@ -82,7 +85,7 @@ class GoogleAuth extends MyAuth
|
||||
//Google 서비스 설정
|
||||
$service = new Oauth2($this->getMySocket());
|
||||
$authInfo = $service->userinfo->get();
|
||||
log_message("debug", var_export($authInfo, true));
|
||||
log_message('debug', var_export($authInfo, true));
|
||||
//기존 등록된 사용자가 있는지 검사
|
||||
$this->getModel()->where(SNSUserModel::SITE, $this->_site);
|
||||
$entity = $this->getModel()->getEntityByID($authInfo['id']);
|
||||
@ -102,17 +105,18 @@ class GoogleAuth extends MyAuth
|
||||
if (
|
||||
$entity->status !== DEFAULTS['STATUS']
|
||||
) {
|
||||
throw new \Exception("{$this->_site}}의{$authInfo['email']}:{$authInfo['name']}님은 " . $entity->status . "입니다");
|
||||
throw new PageNotFoundException("{$this->_site}}의{$authInfo['email']}:{$authInfo['name']}님은 " . $entity->status . "입니다");
|
||||
}
|
||||
//local db 사용와의 연결 확인
|
||||
$userModel = new UserModel();
|
||||
$userModel = model(UserModel::class);
|
||||
$user_entity = $userModel->getEntityByID($entity->getID());
|
||||
if ($user_entity === null) {
|
||||
throw new \Exception("{$this->_site}의{$authInfo['email']}:{$authInfo['name']}님은 아직 사용자 연결이 이루어지지 않았습니다. ");
|
||||
throw new PageNotFoundException("{$this->_site}의{$authInfo['email']}:{$authInfo['name']}님은 아직 사용자 연결이 이루어지지 않았습니다. ");
|
||||
}
|
||||
return $user_entity;
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception("관리자에게 문의하시기 바랍니다.<BR>{$e->getMessage()}");
|
||||
log_message('error', $e->getMessage());
|
||||
throw new PageNotFoundException("관리자에게 문의하시기 바랍니다.<BR>{$e->getMessage()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,38 +3,45 @@
|
||||
namespace App\Libraries\MySocket;
|
||||
|
||||
use Google\Client;
|
||||
use CodeIgniter\Config\Services;
|
||||
use CodeIgniter\Exceptions\ConfigException;
|
||||
|
||||
class GoogleSocket extends Client
|
||||
{
|
||||
private $_session = null;
|
||||
private $_access_code = "";
|
||||
public function __construct(string $access_code)
|
||||
private $session;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->_access_code = $access_code;
|
||||
parent::__construct();
|
||||
$this->_session = \Config\Services::session();
|
||||
$this->setClientId(getenv("socket.google.client.id"));
|
||||
$this->setClientSecret(getenv("socket.google.client.key"));
|
||||
$this->setRedirectUri(base_url() . getenv("socket.google.client.callback_url"));
|
||||
$this->session = Services::session();
|
||||
$this->setClientId(env('socket.google.client.id'));
|
||||
$this->setClientSecret(env('socket.google.client.key'));
|
||||
$this->setRedirectUri(base_url(env('socket.google.client.callback_url')));
|
||||
$this->addScope('email');
|
||||
$this->addScope('profile');
|
||||
}
|
||||
|
||||
public function setMyToken(): void
|
||||
public function setToken(string $access_code): void
|
||||
{
|
||||
//2.토큰정보 가져오기
|
||||
$tokenInfo = $this->fetchAccessTokenWithAuthCode($this->_access_code);
|
||||
// 토큰 정보 가져오기
|
||||
$tokenInfo = $this->fetchAccessTokenWithAuthCode($access_code);
|
||||
|
||||
if (isset($tokenInfo['error'])) {
|
||||
throw new \Exception($tokenInfo['error']);
|
||||
throw new ConfigException($tokenInfo['error']);
|
||||
}
|
||||
$token = $tokenInfo[getenv("socket.google.client.token_name")];
|
||||
//3. Google Service에 접근하기위해 Access Token을 설정
|
||||
|
||||
$tokenName = env('socket.google.client.token_name');
|
||||
$token = $tokenInfo[$tokenName];
|
||||
|
||||
// Google Service에 접근하기 위해 Access Token 설정
|
||||
$this->setAccessToken($token);
|
||||
//4. Google에 로그인이 했으므로 세션에 Token값 설정
|
||||
$this->_session->set(getenv("socket.google.client.token_name"), $token);
|
||||
|
||||
// 세션에 Token 값 설정
|
||||
$this->session->set($tokenName, $token);
|
||||
}
|
||||
public function getMyToken(): ?string
|
||||
|
||||
public function getToken(): ?string
|
||||
{
|
||||
return $this->_session->get(getenv("socket.google.client.token_name"));
|
||||
return $this->session->get(env('socket.google.client.token_name'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<button type="submit" class="btn btn-primary">로그인</button>
|
||||
<?= anchor(URLS['GOOGLE_LOGIN'], ICONS['GOOGLE'] . 'Google 로그인', ["class" => "btn btn-danger"]) ?>
|
||||
<?= anchor($viewDatas['google_url'], ICONS['GOOGLE'] . 'Google 로그인', ["class" => "btn btn-danger"]) ?>
|
||||
<button type="button" class="btn btn-outline-primary">회원가입</button>
|
||||
</div>
|
||||
<?= form_close(); ?>
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
"php": "^8.3",
|
||||
"cloudflare/sdk": "^1.3",
|
||||
"codeigniter4/framework": "^4.5",
|
||||
"google/apiclient": "^2.0",
|
||||
"google/apiclient": "^2.15.0",
|
||||
"guzzlehttp/guzzle": "^7.9",
|
||||
"phpoffice/phpspreadsheet": "^1.27",
|
||||
"symfony/css-selector": "^7.1",
|
||||
@ -42,9 +42,10 @@
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true
|
||||
"sort-packages": true,
|
||||
"process-timeout": 600
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user