использование jQuery для добавления дополнительных данных к каждой ссылке на странице - PullRequest
2 голосов
/ 30 августа 2011

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

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

Я думаю, я могу использовать jQuery, чтобы добавить что-то к параметру href всех ссылок, строку строки:

jQuery("a").attr("href).append("?token='"+tokenStr+"'");

Но тогдаесли ссылка уже имеет «?», это приведет к ошибке.Я предпочитаю отправлять информацию в виде POST на сервер (любая другая альтернатива?), Но я не уверен, возможно ли это сделать в HTML.

причина, по которой я не хочу, чтобы токен аутентификации былчасть URL-адреса заключается в том, что если пользователь добавит эту страницу в закладки, сервер направит его на страницу входа в систему, так как срок действия токена истечет через некоторое время.

Ответы [ 3 ]

0 голосов
/ 30 августа 2011

Попробуйте это:

var tokenStr = 'something';
$('a').each(function(){
    var elem = $(this),
        href = elem.attr('href'),
        hasQueryString = href.indexOf('?') > -1;
    if (hasQueryString) {
        elem.attr('href', href + '&token=' + tokenStr);
    } else {
        elem.attr('href', href + '?token=' + tokenStr);
    }
});

Вот лучшая версия, которая позволяет хэшировать (#) / якоря в URL:

var tokenStr = 'something';
$('a').each(function () {
    var elem = $(this),
        parts = elem.attr('href').split('#'),
        hasQueryString = parts[0].indexOf('?') > -1;
    if (parts[0].length > 0) {
        parts[0] = parts[0] + (hasQueryString ? '&' : '?') + 'token=' + tokenStr;
    }
    elem.attr('href', (parts.length > 1 ? parts.join('#') : parts.join()));
});

Также вы можете ввести «токен»Параметр как скрытое поле для всех форм на странице тоже:

$('form').append(
    $('<input type="hidden" name="token"/>').attr('value', tokenStr)
);
0 голосов
/ 30 августа 2011

Вы можете прикрепить скрытый ввод к каждой форме на странице, чтобы поддержать отправку токена через POST или GET.

$("form").append('<input type="hidden" name="token" value="'+tokenStr+'"/>');

А для добавления токена к любым ссылкам на странице используйте: РЕДАКТИРОВАТЬ: на самом деле есть проблема с любыми другими реализациями добавления токена, и это тот случай, когда у вас есть ссылка с некоторым хешем, например /mypage.html?foo=bar#content. Мы должны обнаружить всякий раз, когда href ссылки имеет хеш символ, чтобы правильно добавить токен.

Обновлен код ниже:

$("a").each(function() {
    var gps = this.href.split('#');        
    gps[0] = gps[0].indexOf('?')>-1 ? '&'+tokenStr : '?'+tokenStr;
    this.href = gps.length > 1 ? gps.join('#') : gps.join();
});
0 голосов
/ 30 августа 2011

Вы можете использовать как (POST или GET) на своей странице, так и проверить информацию о безопасности и других последствиях: http://www.cs.tut.fi/~jkorpela/forms/methods.html

Однако я не совсем понимаю, почему вы не просто анализируете свою ссылку и действуете на ? , который вы можете найти с соответствующим ответом, таким как добавление + вместо ?

Редактировать: mblase правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...