在很多時候,干得利索不如想的明白,方案應(yīng)該根據(jù)場景來設(shè)計,不是盲目的依靠經(jīng)驗,當(dāng)然這也算新經(jīng)驗!
需求是把公司的幾套公共系統(tǒng)做成通過郵箱用戶名和密碼認(rèn)證,只需記住一對用戶名密碼,簡單為上,只允許用戶在ExtMail的web頁面修改密碼,在做論壇認(rèn)證的時候,由于論壇的復(fù)雜性,想到了如下的幾個方案:
通過OAuth2.0做認(rèn)證,或者自己寫接口,問題是只聽過,沒玩過,在郵箱修改時,也提交到論壇的數(shù)據(jù)庫,可惜不會ExtMail的Perl代碼,且修改代碼工作量太大.
先前已經(jīng)把線上郵箱用戶表同步到內(nèi)網(wǎng),可以做數(shù)據(jù)庫復(fù)制,可論壇和郵箱的數(shù)據(jù)庫字段有較大出入,還是要改大量代碼!
使用觸發(fā)器更新論壇數(shù)據(jù)庫的用戶表.
在仔細(xì)考慮過前面三種辦法之后,在能力范圍內(nèi),已經(jīng)把PHP編寫的論壇認(rèn)證方式修改成適應(yīng)郵箱的加鹽認(rèn)證方式,并測試了導(dǎo)入郵箱用戶名和密碼認(rèn)證。已經(jīng)修改過論壇數(shù)據(jù)庫字段類型,部分后端代碼!最后一步是自動把郵箱數(shù)據(jù)庫的用戶表變更同步到論壇數(shù)據(jù)庫的用戶表。
在討論數(shù)據(jù)庫復(fù)制時,發(fā)現(xiàn)還是最后一種觸發(fā)器的辦法可行性最好,通過對論壇用戶表的大多數(shù)字段設(shè)置默認(rèn)值,做到只添加修改其中的賬號,密碼和郵件三個字段即可完成對論壇用戶的操作,下面是根據(jù)實際情況編寫的MySQL觸發(fā)器.
觸發(fā)器添加用戶:
- use extmail;
- DELIMITER //
- create trigger add_bbsuser
- after insert on extmail.mailbox
- for each row
- begin
- insert into xiuno_bbs.bbs_user(username,password,email) /
- values (new.name,new.password,new.username);
- end //
- DELIMITER ;
觸發(fā)器更新用戶:
- use extmail;
- DELIMITER //
- create trigger update_bbsuser
- after update on extmail.mailbox
- for each row --Vevb.com
- begin
- update xiuno_bbs.bbs_user set username=new.name,/
- password=new.password where email=new.username;
- end //
- DELIMITER ;
觸發(fā)器刪除用戶:
- use extmail;
- DELIMITER //
- create trigger delete_bbsuser
- after delete on extmail.mailbox
- for each row
- begin
- delete from xiuno_bbs.bbs_user where email=old.username;
- end //
- DELIMITER ;
我踩過的坑:剛開始編寫觸發(fā)器,從網(wǎng)上找來的命令都不能用,完全一籌莫展之際領(lǐng)悟到,觸發(fā)器和數(shù)據(jù)庫是綁定的,必須先use extmail到要觸發(fā)的extmail數(shù)據(jù)庫中,才能對這個庫的操作做相應(yīng)的觸發(fā),后來就沒有問題了,我果然是MySQL小白.
新聞熱點
疑難解答
圖片精選