Google+登录 - 仅供登录用户访问的页面

时间:2014-08-20 18:39:08

标签: javascript python google-app-engine google-plus google-login

我决定在我的网页上使用社交媒体优惠,目前我正在实施Google+登录。

我的网站上的其中一个页面只能由登录用户访问(向页面添加内容)。我通过JavaScript将用户登录到网站。

我知道javascript是在客户端执行的,但我很好奇是否可以使用 javascript限制对特定网页的访问。

2 个答案:

答案 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);

致谢:https://stackoverflow.com/a/13734798/1670308

答案 1 :(得分:1)

您无法仅使用客户端javascript执行可靠的访问控制。

这是因为由于javascript在用户的浏览器上执行,因此用户将能够绕过您在那里设置的任何访问控制规则。

在Python代码中,您必须在服务器端执行访问控制。

通常,人们还会在客户端执行某种访问控制检查,而不是阻止访问,但是例如隐藏/禁用用户无法使用的按钮。