# cngx用户认证代码理解 着重看`common_util.readRequestArgs`方法 然后先`ngx.req.read_body()`用于后面的读body `ngx.req.get_uri_args()`用于读get参数,以key\value的形式,即table类型 urlArgs 添加字段 `__startDealTime` 当前处理时间 `local reqHeaders = ngx.req.get_headers(0) or {}` 把headers中的key\value放到reqHeaders 中 `common_util.get_data()` 中内嵌 `ngx.req.get_body_data()` 方法,获取的是bodyStr 用`ngx.var.uri`获取path `if not flag ` 这个逻辑没看懂,之后再细看下 `reqBody = cjson_safe.decode(reqBodyStr)` 继续body字符串,这种解析安卓端会nil,如果nil,用`reqBody = ngx.decode_args(reqBodyStr) or {}`进行解析 如果解析失败,打印错误日志,拒绝请求 再拿一下urlPath,和`/appc/xxxx`进行匹配,这个是socket请求,如果匹配到,就拿`appc_util.transferCore`方法从`api_content`、`reqBody`、`urlArgs`中筛选各个参数,放到reqBody中 然后进入middlewareCheck.check方法 ## validateToken `path = string.gsub( path, "/v4/", "/")`把/v4/换成/ 如果path来自于`/ccb/ccbCallback` 且args或者body中有callback参数,置为nil,并且通过该层校验 如果headers中参数from字段 == "cc",通过该层校验 然后获取userID、version、platform