Пользовательская страница входа MarkLogic App Server cookie cookie с идентификатором GET

1

Я пытаюсь разработать двухуровневое веб-приложение с MarkLogic-9, использующее серверы JavaScript и HTTP-серверы на стороне сервера. У меня есть простая страница, которая запрашивает имя пользователя/пароль и отправляет запрос GET через Ajax на сервер приложений (проверка на уровне приложения).

Мой скрипт 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), мой браузер получает cookie с sessionID. Однако, когда я запускаю login.sjs через запрос Ajax GET, мой браузер не получает никаких файлов cookie. Я не знаю, если это проблема, но я, хотя это, возможно, стоит упомянуть.

Я все еще новичок MarkLogic, поэтому, возможно, я ошибаюсь. В основном, как я могу продолжить сеанс одного пользователя после перенаправления на новую страницу? Использовать файлы cookie для сохранения sessionID? Должен ли я сохранять имя пользователя и пароль в локальном хранилище и регистрироваться каждый раз, когда сайт вызывает новый.sjs файл?

Для полноты, вот клиентская сторона js, которую я использую, чтобы сделать вызов Ajax для входа в систему. Довольно понятно. Файл 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();
        }
    })
})

}

Проблема в том, что, как только страница перенаправляется на домашнюю страницу.html, похоже, что у пользователя нет входа в систему, и когда homepage.html вызывает любой файл.sjs, пользователь сбрасывает значение по умолчанию, которое является "Логин-Пользователь".

Заранее спасибо.

Теги:
cookies
login
marklogic
marklogic-9

2 ответа

0

Проблема заключалась в том, что мой браузер не собирал файлы cookie из логина из-за проблем, которые над моей головой, но я нашел ответ в другом сообщении, так что это может быть дубликат.

Получите и сохраните файл cookie (из Set-Cookie) из ответа AJAX POST.

Мне просто пришлось включить следующую строку в мой запрос ajax:

xhrFields: { withCredentials: true },

Поскольку это вызовет ошибку, если у вас есть подстановочный знак в заголовке Access-Control-Allow-Origin, мне также пришлось изменить эту строку:

xdmp.addResponseHeader('Access-Control-Allow-Origin', '*');

к этому:

xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010');

И теперь мой браузер собирает файлы cookie.

0

Я предлагаю вам ознакомиться с главой 15 руководства по безопасности.

Существует пример проверки подлинности на уровне приложений с использованием страниц пользовательского входа.

Наконец, образец входа в систему на основе IP-адресов не то, что вам нужно, но показывает, как использовать xdmp.Login для переключения пользователей от пользователя приложения по умолчанию.

Я думаю, что со всем этим (не так уж и важно) вы сможете пройти через свою настройку и переделать ее.

  • 0
    Я прошу прощения, если я просто плотный, но я прочитал этот раздел и попробовал все, что я могу придумать, но я все еще не могу понять это. Я постараюсь как-то более явным образом. После того, как login.html вызывает login.sjs и успешно входит в систему, он перенаправляется на homepage.html. Когда homepage.html вызывает homepage.sjs (или любой другой файл .sjs на том же сервере приложений), он теряет тот факт, что пользователь вошел в систему, и возвращается к пользователю по умолчанию (в моем случае, Login-User) , Как перейти на другую страницу, не теряя при этом логин?
  • 0
    @AlecDaling, вызов xdmp.login создает сеанс пользователя в MarkLogic и устанавливает Cookie с идентификатором сеанса. Убедитесь, что он пропущен между вызовами страницы. Вызов с таким идентификатором сеанса автоматически переключается на соответствующего пользователя перед вызовом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню