我正在尝试用MarkLogic-9开发一个两层的web应用程序,使用服务器端的JavaScript和HTTP app服务器。我有一个简单的页面,提示输入用户名/密码,并通过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;我已经对此进行了测试,并通过输出xdmp.currentUser()验证了它是否正常工作。
然后,登录页面重定向到显示基本用户信息的主页。我的问题是,在客户端重定向到主页后,我不知道如何保留当前用户的会话。
应用程序服务器具有应用程序级身份验证和一个名为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新手,所以我可能用完全错误的方式来做这件事。基本上,我如何在重定向到新页面后继续单个用户的会话?我是否要使用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文件时,用户重置为默认值“登录-用户”。
提前谢谢。
https://stackoverflow.com/questions/44482666
复制相似问题