andeya / faygo

Faygo is a fast and concise Go Web framework that can be used to develop high-performance web app(especially API) with fewer codes. Just define a struct handler, faygo will automatically bind/verify the request parameters and generate the online API doc.

Home Page:https://github.com/henrylee2cn/faydoc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jwt中用到的Bearer,在某些ios会报错

Leadrive opened this issue · comments

在某些IOS上,前端访问faygo时,会报SyntaxError DOM Exception 12的错误。
原因是出在jwt中,token的设置带了一个空格。
可以参考
http://www.blogjava.net/laxxx/archive/2015/12/17/428705.html

问题的重现,可以在网上下载黑雷苹果模拟器,该模拟器带的Safira,刚好可以重现此问题。

我的解决办法是用/代替空格,或者二者都支持,当然需要修改下jwt.go的代码

func (mw *FaygoJWTMiddleware) jwtFromHeader(ctx *faygo.Context, key string) (string, error) {
	authHeader := ctx.HeaderParam(key)
	if authHeader == "" {
		return "", ErrEmptyAuthHeader
	}
	// faygo.Debug("jwtFromHeader:", authHeader)
	// ios某些版本,有空格的话,会报SyntaxError DOM Exception 12
	parts := strings.SplitN(authHeader, " ", 2)
	if len(parts) == 2 && parts[0] == mw.TokenHeadName {
		return parts[1], nil
	}
	parts = strings.SplitN(authHeader, "/", 2)
	if !(len(parts) == 2 && parts[0] == mw.TokenHeadName) {
		return "", ErrInvalidAuthHeader
	}

	return parts[1], nil
}

提交了PR