我正在尝试使用服务器端 JavaScript 和 HTTP 应用程序服务器使用 MarkLogic-9 开发一个两层 Web 应用程序。我有一个简单的页面,提示输入用户名/密码,并通过 Ajax 向应用程序服务器发送 GET 请求(应用程序级身份验证)。
我的login.sjs脚本:
//generate object with field names from Request params
var params ={}; //JSON parsed URL parameters
var field_names = xdmp.getRequestFieldNames().toArray();
for(var fname_idx in field_names){
params[field_names[fname_idx]] = String(xdmp.quote(xdmp.getRequestField(String(field_names[fname_idx]))));
}
//get username and password from passed paramters
var username = params.username;
var password = params.password;
var ret = xdmp.login(username,password);
ret;
然后,登录页面会重定向到显示基本用户信息的主页。我的问题是,我无法弄清楚如何在客户端重定向到主页后保留当前用户的 session 。
应用程序服务器具有应用程序级身份验证和一个名为 Login-User 的默认用户,该用户是一个自定义用户,仅具有登录 (xdmp:login) 所需的权限。应用程序服务器托管在 localhost:8601 上。我发现当我直接从浏览器运行login.sjs时(即输入localhost:8601/login.sjs?username=test_user&password=test_password),我的浏览器会获取带有sessionID的cookie。但是,当我通过 Ajax GET 请求运行 login.sjs 时,我的浏览器没有获取任何 cookie。我不知道这是否是问题所在,但我认为这可能值得一提。
我仍然是 MarkLogic 新手,所以我可能会以完全错误的方式处理这个问题。基本上,重定向到新页面后如何继续单个用户的 session ?我是否使用cookies来保存sessionID?我是否应该将用户名和密码保留在本地存储中并在每次网站调用新的 .sjs 文件时登录?
为了完整起见,这里是我用来进行 Ajax 调用登录的客户端 js。非常不言自明。如果登录成功,login.sjs 文件仅返回 true/false。
function createLoginEar(){
$("#login-button").click(function(event){
var un = $("#username").val();
var pw = $("#password").val();
if(un){
params.username = $("#username").val();
}
if(pw){
params.password = $("#password").val();
}
event.preventDefault(); //prevent form from clearing
console.log("input entered");
$.ajax({
type: "GET",
url: url,
data: params,
success: function(data){
if(data == "true"){
console.log("worked");
window.location.href = "homepage.html";
} else{
invalidLogin();
}
},
error: function(data){
invalidLogin();
}
})
})
}
问题是,一旦页面重定向到 homepage.html,似乎就没有用户登录的内存,并且当 homepage.html 调用任何 .sjs 文件时,用户会重置为默认值“登录-用户”。
提前致谢。
最佳答案
我建议你看看Chapter 15安全指南。
有一个使用 Custom Login Pages 的应用程序级身份验证示例.
最后是IP-based login的样本不是您需要的,但向您展示如何使用 xdmp.Login 从默认应用程序用户切换用户。
我认为,通过所有这些内容(实际上并没有太多),您将能够回顾您的设置并重新进行设置。
关于javascript - MarkLogic 应用程序服务器自定义登录页面 sessionID cookie 与 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482666/