javascript - 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 云功能获得更安全的解决方案来完成此任务吗?
解决方案
您可以执行以下两件事来实现此目的:
首先,您需要使用自己的自定义登录名覆盖 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 文件放在公共文件夹中,而是使用模板引擎。
推荐阅读
- c - 尝试在bmp文件中画线时如何在C中实现Bresenham的线算法?
- regex - 删除 grep 中不包含两位数和模式的文件
- shell - 如何从文件夹中添加除iverilog命令行指令中的一个文件之外的所有文件?
- php - 用于 postgresql 的 Laravel 蓝图 inet 类型
- angular - angular-tour-of-heroes 为“api/heroes”提供 404
- c++ - old_head 会在“do-while”循环之后和“while”循环之前更新吗?
- php - Laravel Voyager - 创建用户时如何选择默认角色
- regex - 获取与单词之一匹配的引号之间的所有文本
- css - Dataframe.style 能否仅应用于数据框的特定行
- google-sheets - 如何进行谷歌表格过滤?将一列的数据分组到一个单元格?