我决定在我的网页上使用社交媒体优惠,目前我正在实施Google+登录。
我的网站上的其中一个页面只能由登录用户访问(向页面添加内容)。我通过JavaScript将用户登录到网站。
我知道javascript是在客户端执行的,但我很好奇是否可以使用仅 javascript限制对特定网页的访问。
答案 0 :(得分:1)
以下是一种方法,其中包含评论:
var authenticate = function(req, success, failure) {
// Use the Google strategy with passport.js, but with a custom callback.
// passport.authenticate returns Connect middleware that we will use below.
//
// For reference: http://passportjs.org/guide/authenticate/
return passport.authenticate('google',
// This is the 'custom callback' part
function (err, user, info) {
if (err) {
failure(err);
}
else if (!user) {
failure("Invalid login data");
}
else {
// Here, you can do what you want to control
// access. For example, you asked to deny users
// with a specific email address:
if (user.emails[0].value === "no@emails.com") {
failure("User not allowed");
}
else {
// req.login is added by the passport.initialize()
// middleware to manage login state. We need
// to call it directly, as we're overriding
// the default passport behavior.
req.login(user, function(err) {
if (err) {
failure(err);
}
success();
});
}
}
}
);
};
One idea is to wrap the above code in some more middleware, to make it easier to read:
// This defines what we send back to clients that want to authenticate
// with the system.
var authMiddleware = function(req, res, next) {
var success = function() {
res.send(200, "Login successul");
};
var failure = function(error) {
console.log(error);
res.send(401, "Unauthorized");
};
var middleware = authenticate(req, success, failure);
middleware(req, res, next);
};
// GET /auth/google/return
// Use custom middleware to handle the return from Google.
// The first /auth/google call can remain the same.
app.get('/auth/google/return', authMiddleware);
答案 1 :(得分:1)
您无法仅使用客户端javascript执行可靠的访问控制。
这是因为由于javascript在用户的浏览器上执行,因此用户将能够绕过您在那里设置的任何访问控制规则。
在Python代码中,您必须在服务器端执行访问控制。
通常,人们还会在客户端执行某种访问控制检查,而不是阻止访问,但是例如隐藏/禁用用户无法使用的按钮。