Gin(八):cookies使用,Go語言web最火框架之一

Gin(八):cookies使用,Go語言web最火框架之一

在 Gin(七):中介軟體的介紹和使用,GO語言最火的框架之一 我們留下了一個小尾巴,那就是許可權校驗中介軟體並滅有進行玩啥,那麼今天就對它進行完善。

Cookies

接上回,如何來判斷使用者是否登入呢? cookie 就是一個很好的憑證,cookie 會保留到瀏覽器上,每次訪問請求的時候就會攜帶上,後端透過對 cookie 的識別,來判斷使用者是否登入。

由此一來,首先我們是要在登入的時候儲存 cookie 。修改 userHandler 中 UserLogin 程式碼

在判斷密碼正確的時候,對 cookie 進行新增。

context。SetCookie(“user_cookie”, string(u。Id), 1000, “/”, “localhost”, false, true)

這裡來介紹一下這些引數,第一個引數為 cookie 名;第二個引數為 cookie 值;第三個引數為 cookie 有效時長,當 cookie 存在的時間超過設定時間時,cookie 就會失效,它就不再是我們有效的 cookie;第四個引數為 cookie 所在的目錄;第五個為所在域,表示我們的 cookie 作用範圍;第六個表示是否只能透過 https 訪問;第七個表示 cookie 是否可以透過 js程式碼進行操作。

啟動我們的專案,進行登入操作,F12 開啟我們的控制檯,選擇Application ,在側邊欄找到 cookie,並且選擇我們的站點,此時就可以在我們的右側看到我們剛剛設定的 cookie 資訊

Gin(八):cookies使用,Go語言web最火框架之一

並且有 Expires/Max-Age 屬性,該屬性表示 cookie 的過期時間,一旦超過這個時間,cookie 就會自動消失。

此時,已經表明我們的 cookie 設定成功。

透過中介軟體獲取Cookie

既然 cookie 已經獲取成功,那麼就該對我們新寫的 Auth 中介軟體進行修改了。

我們首先建立一個 401。tmpl 檔案,用於展示我們的許可權不足時的資訊。

{{template “header”}} ​ {{template “nav”}} ​ 請先登入:首頁

當我們要訪問需要許可權的路由時,恰巧我們許可權不足,就會轉跳到該頁面。

此時再完善我們的中介軟體。

func Auth() gin。HandlerFunc { return func(context *gin。Context) { _, e := context。Request。Cookie(“user_cookie”) if e == nil { context。Next() } else { context。Abort() context。HTML(http。StatusUnauthorized, “401。tmpl”, nil) } ​ } }

在這裡我們透過 context。Request。Cookie() 來獲取指定的 cookie 。這裡還有一個函式 context。Abort()表示對當前的請求進行中止。

重新啟動專案,直接去訪問 http://localhost:8080/user/profile/?id=5,會出現我們的401 頁面。當我們登入後再進行訪問,就可以正常訪問。

此時此刻說明我們的 auth 中介軟體起到了作用。

重新整理 cookie

在上面的 cookie 設定中有一個引數是為了設定過期時間,那麼過期時間到底設定多長呢?過期時間設定過長,那麼可能留下安全隱患,如果設定過短,又給使用者帶來不方便。

所以我們要在 cookie 請求成功的時候自動重新整理我們的 cookie 時間。

修改我們中介軟體程式碼。

首先是獲取到原來的 cookie ,然後就是重新設定一個 cookie。

func Auth() gin。HandlerFunc { return func(context *gin。Context) { cookie, e := context。Request。Cookie(“user_cookie”) if e == nil { context。SetCookie(cookie。Name, cookie。Value, 1000, cookie。Path, cookie。Domain, cookie。Secure, cookie。HttpOnly) context。Next() } else { context。Abort() context。HTML(http。StatusUnauthorized, “401。tmpl”, nil) } } }

重新啟動我們的專案,仍舊是開啟我們專案的控制檯,每次訪問需要許可權的介面時,都會看到cookie的過期時間在重新重新整理。

✍總結

本章節主要講述了 cookie 如何新增,如何獲取,又如何透過中介軟體來校驗 cookie 和重新整理 cookie

‍本章節程式碼

Github 檢視

瞭解更多

推薦閱讀

Gin(一):Hello Gin ,學習 Gin 從這裡開始

Gin(二):路由Router ,go語言框架學習

Gin(三):與模板配合使用 tmpl,go web 開發最火框架之一

Gin(四):接收表單資料和模型繫結,Go語言最火web框架之一

Gin(五):連線MySQL , Go 輕量級框架 Gin

Gin(六):檔案的上傳,go語言最火框架之一

Gin(七):中介軟體的介紹和使用,GO語言最火的框架之一

Gin(八):cookies使用「不做標題黨,讓你看後有所收穫」

Gin(九):生成restful 介面,go語言最火web框架之一

Gin(十): 整合 Swagger,Gin配置這個神器,再也不用寫介面文件了