У нас есть хранимая процедура «GetToken», которая вызывается при входе пользователей на наш сайт.Эта хранимая процедура генерирует GUID (возвращая его клиенту) и вставляет запись в нашу таблицу «TokenIndex».GUID действителен только в течение длительного периода времени, поэтому каждый раз, когда пользователь входит в систему, мы генерируем новый GUID и удаляем все предыдущие записи «TokenIndex» для этого конкретного пользователя.Проблема, с которой мы сталкиваемся (и это сводит нас с ума), заключается в том, что оператор delete удаляет все записи в таблице "TokenIndex", как если бы он игнорировал предложение WHERE LoginID = loginId
внутри DELETE FROM TokenIndex
заявление.См. Ниже нашу хранимую процедуру:
CREATE DEFINER=`arcanatekauth`@`%` PROCEDURE `GetToken`(
IN _username NVARCHAR(100),
IN _password TINYBLOB
)
BEGIN
declare guid CHAR(36);
declare clientId int;
declare loginId int;
declare clientConnectionString nvarchar(500);
Select li.ClientID, li.ID INTO clientId, loginId
FROM LoginIndex li
WHERE li.UserName = _username and li.Password = _password;
if(clientId > 0)
then
begin
SET guid = UUID();
DELETE FROM TokenIndex
WHERE LoginID = loginId;
SELECT ci.ConnectionString INTO clientConnectionString
FROM ClientIndex ci
WHERE ci.ID = clientId;
INSERT INTO TokenIndex (Token, LoginID, ConnectionString, ExpirationDtTm)
VALUES (guid, loginId, clientConnectionString, NOW() + INTERVAL 1 HOUR);
end;
end if;
select guid;
END