移動Web前端,游客點擊商品的收藏按鈕,登錄完成,回來之后,如何自動收藏


我們都知道,移動Web端(M站環境下),很多時候,前端是無法判斷用戶的登錄狀態的,因為出於安全性考慮,與賬號相關的cookie字段一般都是 http-only的。

如果前端想判斷用戶的登錄狀態,需要主動去調后台接口,根據后台接口返回的狀態碼來判斷。

那么,我如果想實現下面這樣一個場景,該怎么做呢?

移動Web端(M站環境下),游客點擊商品的收藏按鈕,登錄完成,回來之后,如何自動收藏?

方式一:在url里加字段

具體步驟如下:

(1)游客點擊收藏按鈕,立即調用favCommAdd的接口(假設這個是收藏商品的接口)。如果接口返回未登錄,就往重定向的url中加字段doFavor=true,然后去執行登錄操作。比如:

var rurl = location.href + '&isLogin=true'
favCommAdd(skuId, rurl);  //調用接口。參數一表示,給指定的sku添加收藏。參數二用於登錄成功后的回跳

上面的這個rurl參數指的是用戶登錄成功后的回跳鏈接

(2)頁面初始化的時候,做判斷:如果當前頁面的url中包含了doFavor=true字段(代表用戶在上面的第一步中登錄成功),就調用FavCommAdd的接口。收藏成功。

    var doFavor = url.getUrlParam('doFavor'); //這一行是偽代碼,用於獲取url中的指定參數
        if(doFavor&&doFavor == 'true'){
            console.log('登錄成功了');
            queryAskPermission();
        }

總結:方式一的這種做法存在csrf安全問題,如果我把當前頁面攜帶doFavor字段的url鏈接轉發給別人(例如 smyhvae.com/item.shtml?sku=1234&doFavor=true),別人點進去之后,也會去調用FavCommAdd接口。

方式二:往cookie里加字段

具體步驟如下:

方式二和方式一是類似的。只不過,這次,我們是在 cookie 里加字段,而不是在 url 里加字段。

具體步驟如下:

(1)游客點擊收藏按鈕,立即調用FavCommAdd的接口。如果接口返回未登錄,就往 cookie 里加doFavor字段,然后去執行登錄操作。比如:

cookie.set('dofav','ok',1);   //這一行是偽代碼,表示往cookie里加自定義的字段

(2)頁面初始化的時候,做判斷:如果當前頁面的cookie中包含了doFavor字段(代表用戶在上面的第一步中登錄成功),就調用FavCommAdd的接口,同時刪除這個cookie字段。收藏成功。比如:

        if (cookie.get('dofav')){  //這一行是偽代碼,表示獲取指定的cookie字段
            cookie.del('dofav');
            obj.fav();
        }

總結

方式二比方式一更安全,如果把鏈接轉發給他人,他人那里並未檢測出cookie里的指定字段,自然也就無法調用FavCommAdd 接口。

但是,方式二依然避免不了csrf攻擊(比如說,當黑客往cookie里寫入字段的時候)。但總的來說,方式二還算比較通用。

當然,我們還可以在方式二的基礎之上,往cookie中的字段中加md5碼,並且要保證這個md5的時效性,那就更安全了。

如果還有其他更安全、更嚴謹的方式,歡迎交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM