59 lines
1.7 KiB
Plaintext
59 lines
1.7 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE FUNCTION checktoken(
|
|
p_token VARCHAR(200)
|
|
)
|
|
/*
|
|
Function : 判斷傳入的 Token 是否過期, 若未過期, 傳回 userid, 已過期傳回空白
|
|
Description: 判斷 Token 是否過期, 若未過期, 傳回 0, 已過期傳回 9
|
|
簡單的測試 ok
|
|
Build Date : 2018/03/02
|
|
|
|
Modify History
|
|
Item Who Date Modify Docs
|
|
==== ========== ========== ================================================
|
|
1 Michael 2018/01/08 開始改寫為 MySQL 版
|
|
|
|
*/
|
|
RETURNS VARCHAR(100)
|
|
DETERMINISTIC
|
|
BEGIN
|
|
DECLARE v_lastlogintime DATETIME;
|
|
DECLARE v_recno INT;
|
|
DECLARE v_diffhour INT;
|
|
DECLARE v_statuscode INT;
|
|
DECLARE v_errMsg VARCHAR(200);
|
|
DECLARE v_longday INT; -- 0: token 永久有效 其他: token 的效期天數
|
|
DECLARE v_userid VARCHAR(100);
|
|
|
|
SET v_longday = 0; -- token 預設永久有效
|
|
SET v_statuscode = 4;
|
|
SET v_userid = '';
|
|
SET v_errMsg = '帳號或密碼錯誤!';
|
|
|
|
SELECT COUNT(*), userid, lastlogintime
|
|
INTO v_recno, v_userid, v_lastlogintime
|
|
FROM sys_users
|
|
WHERE IFNULL(isstop, '') <> 'Y'
|
|
AND IFNULL(token, 'null') = p_token
|
|
GROUP BY userid, lastlogintime;
|
|
|
|
IF v_recno > 0 THEN
|
|
-- 如果傳入 token
|
|
SELECT TIMESTAMPDIFF(HOUR, v_lastlogintime, NOW()) INTO v_diffhour;
|
|
|
|
IF v_diffhour >= 24 * v_longday AND v_longday > 0 THEN
|
|
SET v_statuscode = 9;
|
|
SET v_errMsg = 'token 已過期,請重新登入!';
|
|
SET v_userid = '';
|
|
ELSE
|
|
SET v_statuscode = 0;
|
|
SET v_errMsg = 'token 有效!';
|
|
END IF;
|
|
END IF;
|
|
|
|
-- 回傳值 dataset[0], 前3個欄位有固定的內容
|
|
RETURN IFNULL(v_userid, '');
|
|
END //
|
|
|
|
DELIMITER ; |