首页 > 解决方案 > URL 访问静态 HTML 页面 - 登录前在 Parse.com 平台中

问题描述

我是解析新手,我正在尝试使用静态 HTML 页面、CSS 和 JS 创建一个简单的 Web 应用程序。我也将云函数用于一些任务。

问题是我创建了一个登录页面和一个检查用户是否使用 JS 客户端登录到 Web 应用程序的函数,它看起来像这样:

function CheckUserLogin(){ 
   var currentUser = Parse.User.current();
   if (currentUser) {
    //do nothing
   } else {
    //rediect user to login html page
    window.location.href = “loginpage.html”
  }
}

问题是,如果用户通过浏览器 URL 导航到 /Home.html 页面,他可以看到该页面几秒钟,直到 js 检查他是否登录并将用户重定向到登录页面。我想这不太安全……</p>

知道如何通过 js 或 parse.com 云功能获得更安全的解决方案来完成此任务吗?

标签: javascripthtmlparse-platform

解决方案


您可以执行以下两件事来实现此目的:

首先,您需要使用自己的自定义登录名覆盖 Parse 登录名,您可以执行以下操作:

// this will add sessionToken in a cookie, which can be later used to check if your user is logged in or not
app.post('/login', function(req, res) {
    Parse.User.logIn(req.body.username, req.body.password).then(function(user) {
        var val = JSON.stringify({sessionToken: user.getSessionToken()});
        var opts = {path: '/', httpOnly: true};
        res.cookie('parse.session', val, opts);
        res.redirect('/');
    }).then(null, function(error) {
        res.clearCookie('parse.session');
        res.render('pages/login', { flash: error.message });
    });
});

现在您需要添加一个中间件以从 cookie 中获取此用户:

// Middleware adding current user to `req.user` or redirecting to login if not logged in
app.use(function (req, res, next) {
    var cookie = null;
    new Parse.Promise.as().then(function() {
        cookie = JSON.parse(req.cookies['parse.session']);
        return Parse._request('GET', 'users/me', {}, {sessionToken: cookie.sessionToken});
    }).then(function (userData) {
        userData.sessionToken = cookie.sessionToken;
        req.user = Parse.Object.fromJSON(userData);
        next();
    }).then(null, function () {
        res.clearCookie('parse.session');
        return res.redirect('/login');
    });
});

现在您可以放心地假设如果用户到达 Home.html,它将是一个登录用户。我仍然不建议将 HTML 文件放在公共文件夹中,而是使用模板引擎。


推荐阅读