Необходимо разработать капчу для веб-приложения с использованием веб-программирования. Ожидается завершение проекта в течение 20 часов с бюджетом 200$. Кандидаты должны иметь опыт в разработке подобных решений и быть готовы предоставить примеры своих работ.
Счётчик запросов
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
Счётчик запросов 20-25ч 250$
/**
* Функционал позволяющий отследить закрытие окна браузера и деавторизовать пользователя.
* Используются keepalive посылки.
* Иных способов отследить закрытие окна браузера НЕТ.
* window.onunload = function() сработает и при переходе на другой URL или отправке формы.
*
*/
NG_Core::add_page_assets( 'auth_keepalive_code' );
function auth_keepalive_code() {
if ( ! is_user_logged_in() ) {
return;
}
$interval = (int) floor( USER_INVALIDATE_AFTER / 3 ) * 1000;
?>
}
NG_Ajax::add_ajax_handler( 'keepalive', function () {
if ( NG_User::update_auth_cookies() ) {
echo 'I hear you.';
return;
}
header( 'HTTP/1.0 403 Access Forbidden', true, 403 );
echo 'Nope!';
} );
/**
* Class NG_User
*
* Авторизация пользователя. Сессии пользователя.
*
*
*/
class NG_User {
private static $user_id = false;
private static $auth_callback = null;
private static $pass = '';
static function determine_user() {
// Logging in
if ( cm_is_auth_request()
&& cm_is_http_post() ) {
if ( ( $name = cm_get_post( 'name', '[\wа-я]+' ) )
&& ( $pass = cm_get_post( 'pass' ) ) ) {
if ( ! self::authenticate_user( $name, $pass ) ) {
ng_add_error_notice( 'Неверный пароль или имя пользователя.' );
return false;
}
else {
NG_Core::do_action( 'authenticated', self::$user_id );
}
}
// No further processing is needed
header( "Location: " . ng_get_site_url(), true );
exit;
}
if ( ! empty( self::$user_id ) ) {
return self::$user_id;
}
// Determining logged-in user
self::$user_id = false;
if ( ( $sid = cm_get_cookie( USER_AUTH_COOKIE_UID ) )
&& ( $hash = cm_get_cookie( USER_AUTH_COOKIE_HASH ) )
&& ( $expires = cm_get_cookie( USER_AUTH_COOKIE_EXPIRES ) )
&& ( $ka = cm_get_cookie( USER_AUTH_COOKIE_KEEPALIVE ) ) ) {
if ( hash_equals( $hash, self::create_hash( array( $sid, $expires, $ka ) ) ) ) {
if ( $expires
|| $ka
self::logout();
return false;
}
self::$user_id = $sid;
/*if ( USER_AUTH_SAVE_PWD ) {
self::$pass = cm_array_get( $_SESSION, 'pass' );
if ( ! self::$pass ) {
self::$user_id = false;
}
}*/
}
}
// Logging out
if ( cm_is_auth_request()
&& ! cm_is_http_post()
&& ( 'logout' == cm_array_get( $_GET, 'action' ) ) ) {
self::logout();
}
return self::$user_id;
}
static function authenticate_user( $user_name, $pass ) {
if ( ! is_callable( self::$auth_callback ) ) {
return false;
}
if ( self::$user_id = call_user_func( self::$auth_callback, $user_name, $pass ) ) {
//setcookie( USER_AUTH_COOKIE_UID, $user_name, time() + USER_AUTH_VALID, '/' );
//setcookie( USER_AUTH_COOKIE_HASH, self::user_hash( $user_name ), time() + USER_AUTH_VALID, '/' );
self::set_auth_cookies( $user_name );
self::$pass = $pass;
/*if ( USER_AUTH_SAVE_PWD ) {
$_SESSION['pass'] = $pass;
}*/
}
return self::$user_id;
}
static function set_auth_cookies( $user_name ) {
$expire = time() + USER_AUTH_VALID;
setcookie( USER_AUTH_COOKIE_EXPIRES, $expire, $expire, '/' );
setcookie( USER_AUTH_COOKIE_UID, $user_name, $expire, '/' );
$ka = time() + USER_INVALIDATE_AFTER;
setcookie( USER_AUTH_COOKIE_KEEPALIVE, $ka, $expire, '/' );
setcookie( USER_AUTH_COOKIE_HASH, self::create_hash( array( $user_name, $expire, $ka ) ), $expire, '/' );
}
static function update_auth_cookies() {
if ( ! self::determine_user() ) {
false;
}
$user_name = cm_get_cookie( USER_AUTH_COOKIE_UID );
$expire = cm_get_cookie( USER_AUTH_COOKIE_EXPIRES );
if ( ! $user_name
|| ! $expire ) {
return false;
}
$ka = time() + USER_INVALIDATE_AFTER;
setcookie( USER_AUTH_COOKIE_KEEPALIVE, $ka, $expire, '/' );
setcookie( USER_AUTH_COOKIE_HASH, self::create_hash( array( $user_name, $expire, $ka ) ), $expire, '/' );
return true;
}
/**
* @param array $params
*
* @return string
*/
static function create_hash( $params ) {
return hash( 'sha512', implode( '|', $params ) . USER_AUTH_SALT );
}
/**
* @param $callback
*
* @return bool
*/
static function add_authenticator( $callback ) {
if ( is_callable( $callback ) ) {
self::$auth_callback = $callback;
return true;
}
return false;
}
static function is_logged_in() {
return ! empty ( self::$user_id );
}
static function get_user_id() {
return self::$user_id;
}
static function get_user_pass() {
/*if ( USER_AUTH_SAVE_PWD ) {
return self::$pass;
}
return '';*/
}
static function logout() {
NG_Core::do_action( 'logout', self::$user_id );
self::$user_id = false;
self::$pass = '';
setcookie( USER_AUTH_COOKIE_UID, 'X', time() - 1, '/' );
setcookie( USER_AUTH_COOKIE_HASH, 'X', time() - 1, '/' );
/*if ( USER_AUTH_SAVE_PWD ) {
$_SESSION = array();
if ( session_status() === PHP_SESSION_ACTIVE ) {
session_destroy();
}
}*/
NG_Core::do_action( 'logged_out' );
}
}
Заявки фрилансеров
Похожие заказы
- $200Веб-программирование1 заявкаЗакрыт3 года назад
Необходимо подключить две платежные системы: Webmoney (WMZ) и Payeer к существующему сайту на PHP, основанному на скрипте smm панели. Интеграция должна быть выполнена с выводом систем в админку для удобного управления.
Веб-программирование2 заявкиЗакрыт3 года назадТребуется подключить оплату через сберкассу к сайту без использования WooCommerce. Необходимо добавить селект для выбора суммы и динамически подставлять цену в ссылку на платежную систему. После заполнения формы должен быть переход по ссылке платежки.
Веб-программирование2 заявкиЗакрыт3 года назадТребуется скопировать лендинг на платформе Тильда с точным воспроизведением дизайна с донора. Необходима адаптация под мобильные устройства для корректного отображения. Ссылка на оригинал будет предоставлена в личных сообщениях.
Веб-программирование3 заявкиЗакрыт3 года назадТребуется перенести готовый дизайн лендинга из Figma в приложение на React с использованием Ant Design. Необходима точная верстка и адаптация элементов интерфейса для достижения максимального соответствия оригиналу.
Веб-программирование1 исполнительЗакрыт3 года назадТребуется разработать PHP-скрипт для интеграции API на сайте WordPress, специализирующемся на аренде яхт. Сценарий должен отображать список доступных яхт по заданным параметрам: страна, дата бронирования и тип яхты. Предоставлены доступы к оплаченной API и документация. На сайте будет каталог с фильтром для яхт.
Веб-программирование2 заявкиЗакрыт3 года назад- $10
Требуется заменить тексты на главной странице сайта и установить видео на задний фон в верхнем блоке. Ищется специалист с опытом в веб-программировании. Пример замены текстов предоставлен в скриншоте.
Веб-программирование8 заявокЗакрыт3 года назад Требуется специалист по Битрикс для доработки календаря в оформлении заказа. Необходимо ограничить выбор прошлых дат, чтобы пользователи могли выбирать только текущую и будущие даты для доставки. Календарь и интервалы времени уже выведены, требуется внести изменения в функционал.
Веб-программирование1 исполнительЗавершен3 года назадТребуется программист для разработки сайта на WordPress с доработками в админке и бэкенде. Необходимо реализовать авторизацию через ОК, ВК, Telegram и Facebook. Убедитесь в знании PHP, MySQL, а также JavaScript, включая jQuery и AJAX. Оплата по результатам собеседования.
Веб-программирование7 заявокЗакрыт3 года назад- $120
Разработать чат-бота для Telegram, который будет собирать данные пользователей при регистрации и ежедневно контролировать время выполнения услуг. Данные должны заноситься в Google Таблицы, с возможностью построения графика по имени, услуге и времени выполнения. Бюджет 5-10 тыс. рублей, сроки обсуждаются.
Веб-программирование2 заявкиЗакрыт3 года назад