現在來驗證token,進入database寫入
DELIMITER ;;
CREATE PROCEDURE `check_token`(
userid INT UNSIGNED,
code CHAR(44),
ownerid INT UNSIGNED
)
BEGIN
SELECT 1
FROM `token`
JOIN `owner`
ON `owner`.`uid` = userid
AND `owner`.`oid` = ownerid
WHERE `token`.`uid` = userid
AND `token`.`accesscode` = code;
END ;;
DELIMITER ;
解釋:
在database/auth.go補上
// generate a new access token
func CheckAccessToken(uid, code, oid string) (bool, error) {
return db.SQL("call check_token(?, ?, ?)", uid, code, oid).Exist()
}
在serve/account.go補上
// check access token vaild
func CheckAccessToken(c *gin.Context) {
// get cookie param
param, err := common.GetCookieParam(c, "AccessToken");
if err != nil {
c.Abort()
return
}
if has, err := database.CheckAccessToken(param.Get("uid"), param.Get("AccessCode"), c.PostForm("oid")); err != nil {
log.Warn(c, 1500006, err, "Sorry, something error", "database error of check access token")
c.Abort()
return
} else if !has {
log.Warn(c, apperr.ErrPermissionDenied, err, "access token parse fail")
c.Abort()
return
}
}
解釋:
在middleware package創建auth.go寫入
package middleware
import (
"app/serve"
"github.com/gin-gonic/gin"
)
func Auth() gin.HandlerFunc {
return func(c *gin.Context) {
serve.CheckAccessToken(c)
if c.IsAborted() {
return
}
c.Next()
}
}
基本上除了read以外的操作都是需要所有人許可才能操作,所以我們把這個middleware加到read以外的路由上,打開router/main.go,MainRouter function裡會長這樣
/*auth*/
owner := r.Group("/:owner")
{
owner.Use(middleware.Auth()) //加在這邊
owner.POST("", serve.CreateOwner)
owner.PUT("", serve.UpdateOwner)
owner.DELETE("", serve.DelOwner)
work := owner.Group("/*work")
{
work.POST("", serve.CreateBlog)
work.PUT("", serve.UpdateBlog)
work.DELETE("", serve.DelBlog)
}
}
現在只剩下js, css等資源加載要處理,明天會把他解決
目前的工作環境
.
├── app
│ ├── apperr
│ │ ├── error.go
│ │ └── handle.go
│ ├── common
│ │ └── cookie.go
│ ├── config
│ │ └── app
│ │ ├── app.yaml
│ │ └── error.yaml
│ ├── database
│ │ ├── auth.go
│ │ ├── connect.go
│ │ ├── error.go
│ │ ├── main.go
│ │ └── scheme.go
│ ├── go.mod
│ ├── go.sum
│ ├── log
│ │ ├── logger.go
│ │ └── logging.go
│ ├── main.go
│ ├── middleware
│ │ ├── auth.go
│ │ ├── error.go
│ │ └── log.go
│ ├── router
│ │ ├── account.go
│ │ ├── host_switch.go
│ │ └── main.go
│ ├── serve
│ │ ├── account.go
│ │ ├── auth.go
│ │ ├── main.go
│ │ └── main_test.go
│ ├── setting
│ │ └── setting.go
│ ├── util
│ │ ├── debug
│ │ │ ├── stack.go
│ │ │ └── stack_test.go
│ │ ├── file
│ │ │ └── file.go
│ │ ├── hash
│ │ │ ├── hash.go
│ │ │ └── hash_test.go
│ │ └── random
│ │ └── random.go
│ └── view
│ ├── css
│ ├── html
│ │ ├── component
│ │ │ ├── blogContainer.html
│ │ │ └── blogList.html
│ │ └── meta
│ │ ├── head.html
│ │ └── index.html
│ └── js
└── database
└── maindata