Opened 4 months ago

Last modified 3 months ago

#1844 new Neues Feature

Captcha Reload-Button

Reported by: Tomcraft Owned by: somebody
Priority: normal Milestone: modified-shop-2.0.6.0
Component: Shop Version: trunk

Description

Da es manchmal beim Captcha wirklich nicht zu entziffernde Kombinationen gibt finde ich die Idee eines Reload-Buttons ganz sinnvoll. Eine fertige Lösung hat noRiddle hier vorgeschlagen: Captcha base64-encoded, wo ?

Attachments (0)

Change History (4)

comment:1 Changed 3 months ago by anonymous

Wenn in der modified-eigenen ajax.php der Content-Type für den header nicht auf application/json oder text/IRGENDWAS erwzungen begrenzt wäre könnte man das ja darüber nach modified-Standard machen.
Es funktioniert allerdings mit type: plain nach meinen Tests (wohl weil der Rückgabewert in der Tat ja einfach nur ein String ist).
Wenn Ihr das bestätigen könnt würden die beiden Dateien folgendermaßen aussehen und man bräuchte die Datei im Root aus meinem post nicht:

/**********************************************************************************************************
* file: captcha.js.php
* path: /templates/YOUR_TEMPLATE/javascript/extra/
* use: define function for reload button for captcha
*      adaptation for reload icon in e.g. /templates/YOUR_TEMPLATE/module/contact_us.html needed
*
* (c) 03-2020, noRiddle
***********************************************************************************************************/

if(CAPTCHA_MOD_CLASS == 'modified_captcha' || CAPTCHA_MOD_CLASS == 'php_captcha') {
?>
<script>
$(function(){
    var $rel_capt = $('#rel-capt');
    $rel_capt.click(function(){
        $.post('ajax.php',
            {ext: 'captcha_reload',
             type: 'plain',
             captcha_reloaded: 'cr_true'
            },
            function(data){
                $rel_capt.prev('span').find('img').attr('src', data);
            }
        );
    });
});
</script>
<?php
}
?>
<?php
/*******************************************************
* file: captcha_reload.php
* path: /includes/extra/ajax/
* use: function for php response on ajax request to reload captcha
*
* (c) 07-2020, noRiddle
*******************************************************/

function captcha_reload() {
    if(isset($_POST['captcha_reloaded']) && $_POST['captcha_reloaded'] == 'cr_true') {
        require_once(DIR_WS_CLASSES.'modified_captcha.php');
        $mod_capt_inst = $_mod_captcha_class::getInstance();

        return 'data:image/jpeg;base64,'.base64_encode($mod_capt_inst->output());
    }

    return '';
}
?>

Gruß,
noRiddle

comment:2 Changed 3 months ago by Tomcraft

Den Header in der ajax.php zu erweitern sollte ja kein problem sein, siehe Zeile 57 - 62:

if ($ajax_rt == 'json') {
  $response = json_encode($response);
  header('Content-Type: application/json');
} else {
  header('Content-Type: text/'.$ajax_rt);
}

comment:3 Changed 3 months ago by anonymous

Ja, schon klar, aber man ist auf text/IRGENDWAS festgelegt.
Was ist z.B. mit image/WASWEISSICH ?

Gruß,
noRiddle

comment:4 Changed 3 months ago by Tomcraft

Na das meinte ich doch, dass man doch die bedingten Anweisungen entsprechend erweitern kann:

if ($ajax_rt == 'json') {
  $response = json_encode($response);
  header('Content-Type: application/json');
} else if ($ajax_rt == 'imagejpeg') {
  header('Content-Type: image/jpeg');
} else if ($ajax_rt == 'imagepng') {
  header('Content-Type: image/png');
} else {
  header('Content-Type: text/'.$ajax_rt);
}

Oder noch flexibler sowas wie:

if ($ajax_rt == 'json') {
  $response = json_encode($response);
  header('Content-Type: application/json');
} else {
  header('Content-Type: '.$type.'/'.$ajax_rt);
}
Last edited 3 months ago by Tomcraft (previous) (diff)

Add Comment

Modify Ticket

Action
as new
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.