访问静态HTML页面的URL--在登录前在Parse.com平台上。

问题描述 投票:0回答:1

我是一个新的解析,并试图用它创建一个简单的Web应用程序,使用静态HTML页面,CSS,和JSI已经使用云函数也为一些任务。

事情是这样的,我创建了一个登录页面和一个检查用户是否用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检查他是否登录,并将用户重定向到登录页面,我想这不是很安全... ...

有什么办法可以让通过js或parse.com云函数实现这个任务的方案更安全吗?

javascript html parse-platform
1个回答
0
投票

你可以做以下两件事来实现。

首先,你需要用你自己的自定义登录来覆盖Parsse登录,你可以做这样的事情。

// 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文件放在公共文件夹里,而是使用模板引擎。

© www.soinside.com 2019 - 2024. All rights reserved.