2013-12-16 136 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;   
     }   
    } 
} 

希望这可以帮助别人有一天。