2013-12-16 169 views
4

我正在使用Phil Sturgeon的REST服務器。我無法設置基本身份驗證或摘要身份驗證。當調用方法時,我得到了提示輸入用戶名和密碼的對話框,即使我用正確的用戶名和密碼寫入,它也不會接受它。我如何解決這個問題?它是否允許我的網絡主機?Codeigniter Rest服務器摘要或基本身份驗證登錄

這是我在rest.php中設置auth的方式: 其餘的是默認設置。

$config['rest_auth']   = 'Basic'; 
$config['auth_source']  = ''; 
$config['rest_valid_logins'] = array('admin' => 'password'); 

回答

7

我自己創建瞭解決方案。我不得不在我的.htaccess文件中添加這個。

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
4

對我來說這沒有工作,但這確實

對我來說它相關的服務器上運行PHP作爲FastCGI的,而不是一個php5_module,喜歡你的本地主機一樣。 (找出這運行的phpinfo - 服務器API:CGI/FastCGI的)

這裏是解決 http://ellislab.com/forums/viewthread/173823/#825912

的.htaccess

RewriteEngine on 
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] 

庫/ REST_Controller.php

// most other servers 
elseif ($this->input->server('HTTP_AUTHENTICATION')) 
{ 
if (strpos(strtolower($this->input->server('HTTP_AUTHENTICATION')),'basic') === 0) 
{ 
    list($username,$password) = explode(':',base64_decode(substr($this->input- >server('HTTP_AUTHORIZATION'), 6))); 
} 
} 

AFTER

// most other servers 
elseif ($this->input->server('HTTP_AUTHENTICATION') || $this->input- >server('REDIRECT_REMOTE_USER')) 
{ 
$HTTP_SERVER_AUTH = ($this->input->server('HTTP_AUTHENTICATION')) ? $this->input->server('HTTP_AUTHENTICATION') : $this->input->server('REDIRECT_REMOTE_USER'); 

if (strpos(strtolower($HTTP_SERVER_AUTH),'basic') === 0) 
{ 
    list($username,$password) = explode(':',base64_decode(substr($HTTP_SERVER_AUTH, 6))); 
} 
} 
4

對不起,寫在這樣一箇舊的線程。以爲這可能會節省一些人的時間。

請注意,此解決方案僅適用於基本身份驗證。我還沒有使用摘要身份驗證來測試它。

我需要調整一下@ Tan的答案來讓.htaccess工作。

我從RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]刪除[L],放在重寫規則只是RewriteEngine on

.htaccess文件後:

RewriteEngine On 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

#Other rules follow 

接下來,我需要改變內部應用程序/ config中的rest.php配置文件目錄。是我所做的更改如下:

$config['auth_source'] = 'ldap'到, $config['auth_library_class'] = ''$config['auth_library_class'] = 'api_auth' $config['auth_library_function'] = ''$config['auth_library_function'] = 'login'

然後,我創建了一個名爲具有以下代碼Api_auth.php一個新的庫文件:

<?php defined('BASEPATH') OR exit('No direct script access allowed'); 

class Api_auth 
{ 
    public function login($username, $password) { 
     if($username == 'admin' && $password == '1234') 
     { 
      return true;    
     } 
     else 
     { 
      return false;   
     }   
    } 
} 

希望這可以幫助別人有一天。