local smatch = string.match local sfind = string.find local function is_login(req) local user if req.session then user = req.session.get("user") if user and user.username and user.userid then return true, user end end return false, nil end local function check_login(whitelist) return function(req, res, next) local requestPath = req.path local in_white_list = false if requestPath == "/" then in_white_list = true else for i, v in ipairs(whitelist) do local match, err = smatch(requestPath, v) if match then in_white_list = true end end end local islogin, user= is_login(req) if in_white_list then res.locals.login = islogin res.locals.username = user and user.username res.locals.userid = user and user.userid res.locals.create_time = user and user.create_time next() else if islogin then res.locals.login = true res.locals.username = user.username res.locals.userid = user.userid res.locals.create_time = user.create_time next() else if sfind(req.headers["Accept"], "application/json") then res:json({ code = AUTH_ERROR.account_login, message = system_error_msg(AUTH_ERROR.account_login), }) -- else -- res:redirect("/api/login") end end end end end return check_login