我有一个问题,让我的可信ip地址的工作-我可以让IP1的工作,但它应该如何,但其余的只是转移回持有页-我错过了什么?
代码:
addEventListener("fetch", event => {
event.respondWith(fetchAndReplace(event.request))
})
async function fetchAndReplace(request) {
let modifiedHeaders = new Headers()
modifiedHeaders.set('Content-Type', 'text/html')
modifiedHeaders.append('Pragma', 'no-cache')
// Allow users through if they are bypass flag and set a cookie
if(request.url.includes("bypass"))
{
// Forward request to origin, get response.
let response = await fetch(request)
// Copy Response object so that we can edit headers.
response = new Response(response.body, response)
// set a cookie for the session
response.headers.set("Set-Cookie", "cf:maintenance-mode=bypass");
// Return on to client.
return response
}
// Allow users through if they have the bypass cookie
// Check for cookie.
let cookies = request.headers.get('Cookie') || ""
if (cookies.includes("cf:maintenance-mode=bypass")) {
// User has been here before. Just pass request through.
return fetch(request)
}
//Return maint page if you're not calling from a trusted IP
var connectionIP = request.headers.get("cf-connecting-ip")
if (connectionIP != "ip1" || connectionIP != "ip2" || connectionIP != "ip3") {
// Return modified response.
return new Response(maintPage, {
headers: modifiedHeaders
})
}
//Allow users from trusted into site
else
{
//Fire all other requests directly to our WebServers
return fetch(request)
}
}
let maintPage = `
<!doctype html>
<title>Site Maintenance</title>
<style>
body {
text-align: center;
padding: 150px;
background: url('data:image/jpeg;base64,<base64EncodedImage>');
background-size: cover;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
}
.content {
background-color: rgba(255, 255, 255, 0.75);
background-size: 100%;
color: inherit;
padding-top: 1px;
padding-bottom: 10px;
padding-left: 100px;
padding-right: 100px;
border-radius: 15px;
}
h1 { font-size: 40pt;}
body { font: 20px Helvetica, sans-serif; color: #333; }
article { display: block; text-align: left; width: 75%; margin: 0 auto; }
a:hover { color: #333; text-decoration: none; }
</style>
<article>
<div class="background">
<div class="content">
<h1>We’ll be back soon!</h1>
<p>We're very sorry for the inconvenience but we’re performing maintenance. Please check back soon...</p>
</div>
</div>
</article>`;发布于 2020-11-17 19:16:02
你有错误的逻辑运算符。
假设connectionIP是ip1。
connectionIP != "ip1" || connectionIP != "ip2" || connectionIP != "ip3"
-> "ip1" != "ip1" || "ip1" != "ip2" || "ip1" != "ip3"
-> false || true || true
-> true
// Or if it's ip2...
-> "ip2" != "ip1" || "ip2" != "ip2" || "ip2" != "ip3"
-> true || false || true
-> true
// Or if it's something else...
-> "different" != "ip1" || "different" != "ip2" || "different" != "ip3"
-> true || true || true
-> true不管connectionIP是什么,它总是要计算为true,因为它总是不等于列表中的值之一。
你真正想要的是&&
connectionIP !== "ip1" && connectionIP !== "ip2" && connectionIP !== "ip3"
-> "ip1" !== "ip1" && "ip1" !== "ip2" && "ip1" !== "ip3"
-> false && true && true
-> false
// Or if it's ip2...
-> "ip2" !== "ip1" && "ip2" !== "ip2" && "ip2" !== "ip3"
-> true && false && true
-> false
// Or if it's something else...
-> "different" !== "ip1" && "different" !== "ip2" && "different" !== "ip3"
-> true && true && true
-> true如果使用Set,则逻辑可能更易于遵循和更易于维护。
const internalAddresses = new Set(["ip1", "ip2", "ip3"]);
// ...
return internalAddresses.has(connectionIP)
? fetch(request)
: new Response(maintPage, { headers: modifiedHeaders })https://stackoverflow.com/questions/64881610
复制相似问题