Skip to content
Snippets Groups Projects
Commit 9ad82c3e authored by Artem Konenko's avatar Artem Konenko
Browse files

Implement optimictic way of OpenID autentification

parent ee71f231
Branches
Tags
No related merge requests found
......@@ -2232,6 +2232,26 @@ BEGIN
RETURN vAccountID;
END //
DROP FUNCTION IF EXISTS SignInByOpenID//
CREATE FUNCTION SignInByOpenID (
pGlobalKey VARCHAR(255) CHARSET utf8
) RETURNS int(11) # account id
NO SQL
BEGIN
DECLARE vAccountID INT DEFAULT -1;
#check account existence
SELECT accounts.ID INTO vAccountID FROM accounts
WHERE accounts.globalKey1C = pGlobalKey
LIMIT 1;
IF vAccountID <= 0 THEN
RETURN -1;
END IF;
INSERT INTO logs_signin (AccountID) VALUES (vAccountID);
RETURN vAccountID;
END //
-- returns:
-- -1 : invalid token
-- >0 : accountID
......
--
-- Добавление идентификатора физ.лица из 1С в таблицу `accounts`
--
ALTER TABLE `accounts`
ADD COLUMN `globalKey1C` varchar(30) CHARACTER SET utf8 AFTER `ID`;
\ No newline at end of file
......@@ -83,22 +83,23 @@ class Controller_Handler_Sign extends Controller_Handler
public function action_openidfinish()
{
if ($_GET["openid_sreg_student"] !== '1') {
$this->fail('К сожалению, личный кабинет сотрудника пока что находится в разработке. Следите за новостями!');
}
if ($_GET['openid_mode'] == 'id_res') {
$openid = new OpenID;
$openid->SetIdentity($_GET['openid_identity']);
$openid_validation_result = $openid->ValidateWithServer();
if ($openid_validation_result == true) {
if ($openid_validation_result == true)
{
$this->openid_signIn();
} else if ($openid->IsError() == true) {
}
else if ($openid->IsError() == true)
{
$error = $openid->GetError();
echo 'Ошибка!';
echo "[" . $error['code'] . "]: " . $error['description'];
} else {
}
else
{
echo 'Ошибка!';
echo "При авторизации что-то пошло не так. Попробуете снова?";
}
......@@ -110,14 +111,14 @@ class Controller_Handler_Sign extends Controller_Handler
private function openid_signIn()
{
$flags = [
'isStudent' => $_GET["openid_sreg_student"],
'isStaff' => $_GET["openid_sreg_staff"]
];
echo 'Добро пожаловать!';
// $this->redirect_url = Route::url('evaluation:student');
//
// Account::signIn($_GET["openid_sig"], $_GET["openid_sreg_r61globalkey"], $flags);
$ok = User::instance()->signInByOpenID($_GET["openid_sreg_r61globalkey"]);
if (!$ok) $this->fail();
$this->redirect('/');
if ($this->user->isSignedIn())
{
$this->redirect('/');
}
}
}
......@@ -110,6 +110,13 @@ class Model_Account extends Model
->execute()->get('ID');
}
public static function checkAuthOpenID($globalKey) {
$sql = 'SELECT `SignInByOpenID`(:key) AS `ID`';
return DB::query(Database::SELECT, $sql)
->param(':key', $globalKey)
->execute()->get('ID');
}
public static function checkAuthToken($token) {
$sql = 'SELECT `SignInByToken`(:token) AS `ID`';
return DB::query(Database::SELECT, $sql)
......
......@@ -159,6 +159,18 @@ class User implements ArrayAccess
return $this->initSession($id, $this->hash($password));
}
/**
* Проверяет существования пользователя с заданным globalKey и авторизует его
*
* @param string $globalKey
* @return bool true, если авторизация прошла успешно,
* и false, если данные являются некорректными.
*/
public function signInByOpenID($globalKey) {
$id = (int) Model_Account::checkAuthOpenID($globalKey);
return $this->initSession($id, $this->hash($globalKey));
}
public function signInByToken($token) {
$id = (int) Model_Account::checkAuthToken($token);
return $this->initSession($id, $this->hash($token));
......
......@@ -3,9 +3,9 @@
{% block title %}Авторизация{% endblock %}
{% block forms %}
<div id='inputs'>
{{ sign.input('loginopenid', 'text', '', 'Логин OpenID', true) }}
{{ sign.input('loginopenid', 'text', '', 'Логин@sfedu.ru', true) }}
</div>
{{ sign.input('signopenidin_b', 'button', 'Войти c OpenID') }}
{{ sign.input('signopenidin_b', 'button', 'Войти через OpenID.sfedu.ru') }}
<div class='footer'>
{{ HTML.anchor('sign/in', 'Вход через локальную учетную запись')|raw }} | {{ HTML.anchor('sign/up', 'Активировать аккаунт')|raw }} | {{ HTML.anchor('remind', 'Забыли пароль?')|raw }}
</div>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment