簡體   English   中英

驗證郵件 - 不可點擊

[英]Verification mail - not clickable

注冊成功后,email會向注冊用戶發送驗證鏈接,但是無法點擊到達的文字,它只是說經典文字,點擊這里驗證您的帳戶。

發送驗證郵件頁面:

<?php
    require_once 'utils.php';
    session_start();

    function sendValidationEmail($email) {
        $db = connect();
        if($db) {
            $oneDayAgo = time() - 60 * 60 * 24;
            $res = sqlSelect($db, 'SELECT users.id,name,verified,COUNT(requests.id) FROM users LEFT JOIN requests ON users.id = requests.user AND type=0 AND timestamp>? WHERE email=? GROUP BY users.id ', 'is', $oneDayAgo, $email);
            if($res && $res->num_rows === 1) {
                $user = $res->fetch_assoc();
                if($user['verified'] === 0) {
                    if($user['COUNT(requests.id)'] <= MAX_EMAIL_VERIFICATION_REQUESTS_PER_DAY) {
                        //Send validation request
                        $verifyCode = random_bytes(32);
                        $hash = password_hash($verifyCode, PASSWORD_DEFAULT);
                        $requestID = sqlInsert($db, 'INSERT INTO requests VALUES (NULL, ?, ?, ?, 0)', 'isi', $user['id'], $hash, time());
                        if($requestID !== -1) {
                            if(sendEmail($email, $user['name'], "Email Verification", "<a href='https://example.com/validate/" . $requestID . "/" . urlSafeEncode($verifyCode) . "' />Click this link to verify your email</a>")) {
                                return 0;
                            }
                            else {
                                // return 'failed to send email';
                                return 1;
                            }
                        }
                        else {
                            // return 'failed to insert request';
                            return 2;
                        }
                    }
                    else {
                        return 3;
                    }
                }
                else {
                    return 4;
                }
                $res->free_result();
            }
            else {
                return 5;
            }
            $db->close();
        }
        else {
            return 6;
        }
        return -1;
    }
    

    if(isset($_POST['validateEmail']) && isset($_POST['csrf_token']) && validateToken($_POST['csrf_token'])) {
        echo sendValidationEmail($_POST['validateEmail']);
    }

.htaccess 文件:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^login/?$ login.php [NC,L]
RewriteRule ^register/?$ register.php [NC,L]

RewriteRule ^validate/?([\d]+)?/?([^/]+)?/?$ validate-email.php?id=$1&hash=$2 [NC,QSA,L]
RewriteRule ^reset-password/?([\d]+)?/?([^/]+)?/?$ reset-password.php?id=$1&hash=$2 [NC,QSA,L]

#Disable Caching for dev
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>
<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|mp3|mp4|png|pdf|swf|txt)$">
    <IfModule mod_expires.c>
        ExpiresActive Off
    </IfModule>
    <IfModule mod_headers.c>
        FileETag None
        Header unset ETag
        Header unset Pragma
        Header unset Cache-Control
        Header unset Last-Modified
        Header set Pragma "no-cache"
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
    </IfModule>
</FilesMatch>

它不會為我創建任何 error_logs,一切正常,除了用戶無法單擊鏈接。

嘗試: "<a href='https://example.com/validate/". $requestID. "/". urlSafeEncode($verifyCode). "'>Click this link to verify your email</a>" "<a href='https://example.com/validate/". $requestID. "/". urlSafeEncode($verifyCode). "'>Click this link to verify your email</a>" "<a href='https://example.com/validate/". $requestID. "/". urlSafeEncode($verifyCode). "'>Click this link to verify your email</a>"您有 /> 之前單擊此鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM