2012-09-24 26 views
1

我試圖在屏幕上輸入密碼錯誤次數太多但不知道如何去解決時在屏幕上出現驗證碼彈出窗口。我已經找到了很多關於這個的網頁,但他們都涉及到使用模板,這些網頁都沒有解釋我必須將其放到我的表單中。用自定義PHPBB登錄頁面的驗證碼

這是我到目前爲止。

define('IN_PHPBB', true); 
    global $auth, $db, $cache, $config, $user, $phpbb_root_path, $phpEx, $template; 
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../main/'; 
    $phpEx = substr(strrchr(__FILE__, '.'), 1); 
    include($phpbb_root_path . 'common.' . $phpEx); 

    $user->session_begin(); 
    $auth->acl($user->data); 

    $remember = $remember==1?true:false; 
    $result = $auth->login($username, $password, $remember); 

    if ($result['status'] == LOGIN_SUCCESS){ 
     return "LOGIN_SUCCESS"; 
     //Launch captcha 
    }else{ 
     if($result['status']==LOGIN_ERROR_ATTEMPTS){ 
      return "LOGIN_ERROR_ATTEMPTS"; 
     } 
     if($result['status'] == LOGIN_ERROR_EXTERNAL_AUTH){ 
      return "No profile exists."; 
     }elseif($result['status'] == LOGIN_BREAK){ 
      return "Failed to create session."; 
     }elseif($result['status'] == LOGIN_ERROR_PASSWORD){ 
      return "Incorrect Password."; 
     }elseif($result['status'] == LOGIN_ERROR_USERNAME){ 
      return "Invalid Username."; 
     }elseif($result['status'] == LOGIN_ERROR_PASSWORD_CONVERT){ 
      return "Internal error, failed to convert password."; 
     }elseif($result['status'] == LOGIN_ERROR_ACTIVE){ 
      return "User is inactive."; 
     } 
    } 
+0

在一個側面說明,爲什麼不使用開關,錶殼和突破,而不是這麼多的ELSEIF的? –

+0

是啊,我的計劃太改變了,但這個驗證碼對我來說現在是一個更大的問題 –

回答

1
define('IN_PHPBB', true); 
global $auth, $db, $cache, $config, $user, $phpbb_root_path, $phpEx, $template; 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; 
$phpEx = substr(strrchr(__FILE__, '.'), 1); 
include($phpbb_root_path . 'common.' . $phpEx); 
if (!class_exists('phpbb_captcha_factory')) 
{ 
    include($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx); 
} 
$user->session_begin(); 
$auth->acl($user->data); 
$username = isset($_POST['username']) ? $_POST['username'] : ''; 
$password = isset($_POST['password']) ? $_POST['password'] : ''; 
$remember = isset($_POST['remember']) ? $_POST['remember'] : '' ; 
$remember = $remember==1?true:false; 
$result = $auth->login($username, $password, $remember); 
$err = ''; 

    switch ($result['status']) 
    { 
     case LOGIN_SUCCESS: 
      $err .= 'Welcome ' . $user->data['username']; 
     break; 

     case LOGIN_ERROR_EXTERNAL_AUTH: 
      $err .= 'No profile exists'; 
     break; 

     case LOGIN_ERROR_ATTEMPTS: 
      $err .= '<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=your_public_key">' . "/n" 
      . '</script>' . "/n" 
      . '<noscript>' . "/n" 
      . '<iframe src="http://www.google.com/recaptcha/api/noscript?k=your_public_key" height="300" width="500" frameborder="0"></iframe><br>' . "/n" 
      . '<textarea name="recaptcha_challenge_field" rows="3" cols="40">' . "/n" 
      . ' </textarea>' . "/n" 
      . ' <input type="hidden" name="recaptcha_response_field" value="manual_challenge">' . "/n" 
      . '</noscript>'; 
      $err .= 'LOGIN_ERROR_ATTEMPTS'; 
     break; 

     case LOGIN_ERROR_PASSWORD_CONVERT: 
      $err .= 'Internal error, failed to convert password.'; 
     break; 

     case LOGIN_BREAK: 
      $err .= "Failed to create session."; 
     break; 

     case LOGIN_ERROR_PASSWORD: 
      $err .= "Incorrect Password."; 
     break; 

     case LOGIN_ERROR_USERNAME: 
      $err .= "Invalid Username."; 
     break; 

     case LOGIN_ERROR_ACTIVE: 
      $err .= "User is inactive."; 
     break; 
    } 
return $err; 
+1

我以前有過這樣的人,但$ captcha-> ​​get_template()將返回false或'captcha_default.html'不知道我該怎麼做將其實施到我的表單中?我甚至不確定'captcha_default.html'頁面是什麼。我該如何命名輸入字段?那裏的代碼沒有處理驗證碼文本的輸入。 –

+1

包含驗證碼的唯一方法是使用phpbb模板,或者您始終可以使用自己的驗證碼,或者有其他方法可以完成與您在下面顯示的操作相同的操作。 使用'login_box(request_var('redirect',「index。$ phpEx」));' 或發佈到'../main/ucp.php?mode = login&redirect = myredirect' –

+0

好吧,非常感謝! –