PHP / CakePHP gelen REMOTE_USER erişme

2 Cevap php

. Ben sadece bir htaccess dosyası kullanarak VAS kimlik doğrulaması etkin oldum hangi bir CakePHP siteyi geliştirmeye devam ediyorum:

AuthType VAS

AuthVasUseBasic On
AuthVasRemoteUserMap local

Require valid-user

I $_SERVER['REMOTE_USER'] kullanılarak kaydedilir kim olduğunu bulmak mümkün olmasını beklersiniz, ama anahtar $_SERVER yapıdan eksik olduğunu bulma yaşıyorum: bütün bu {var var [(2)]}. Aslında, tüm yapı REDIRECT_ öneki ile tuşları dolu:

echo var_dump($_SERVER);
array(52) {
["REDIRECT_REDIRECT_REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6"
["REDIRECT_REDIRECT_REDIRECT_STATUS"]=>  string(3) "200" 
["REDIRECT_REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6" 
["REDIRECT_REDIRECT_STATUS"]=>  string(3) "200" 
["REDIRECT_SCRIPT_URL"]=>  string(37) "/cake_1_2/feedbacks/edit/6" 
["REDIRECT_SCRIPT_URI"]=>  string(55) "http://test/cake_1_2/feedbacks/edit/6" 
["REDIRECT_HANDLER"]=>  string(8) "php5-cgi"
["REDIRECT_STATUS"]=>  string(3) "200" 
["SCRIPT_URL"]=>  string(37) ...
["REDIRECT_REMOTE_USER"]=>  string(9) "andygeers"
... 
}

Ben ne oluyor tam olarak emin değilim! Bu bir POST isteği ilk şey oluşturulur, ve bu özel istek üzerine bir yönlendirme yapmıyor.

Bu CakePHP ile ilgili, ya da sadece genel PHP sorunu var mı? Herhangi bir fikir ne oluyor? Ben REDIRECT_REMOTE_USER bu değeri bulmak için bir yer olarak ortak / normaldir önermek artık internette oldukça birkaç sayfa buldum, ama kimse neden bilmek gibi görünüyor!

2 Cevap

Komut daha iyi oldu ne işleyebilir böylece Apache olanlar REDIRECT_ önek almaktadır. Benim uygulama için ben bu ile başa çıkmak için bir fonksiyon yazdım. Benim durumumda bu bir sınıf bir yöntem, ancak kolayca küresel bir işlevi içine açabilirsiniz.

class MyClass {
    /** @var integer How deep the redirect layers of Apache go. -1 means not set. */
    private $redirectLevel = -1;

    /**
     * Get an environment variable with all the REDIRECT_ prefixes stripped off
     */
    private function getEnv($var)
    {
    	// Find out how deep the redirect goes
    	if ($this->redirectLevel == -1) {
    		reset($_SERVER);
    		$key = key($_SERVER);
    		$this->redirectLevel = substr_count($key, 'REDIRECT_');
    	}

    	$result = '';
    	$prefix = '';
    	for ($i = 0; $i < $this->redirectLevel + 1; $i++) {
    		if (isset($_SERVER[$prefix . $var])) {
    			$result = $_SERVER[$prefix . $var];
    		}
    		$prefix .= 'REDIRECT_';
    	}
    	return $result;
    }
}

EDIT: yukarıdaki fonksiyon ne istediğinizi genellikle en REDIRECT_ önekleri olan değişkenin içeriğini döndürür. Apache değişkenleri önek olmaz ise o olsun istiyorum budur. Değişkenlerin içerikleri öneklerin sayısına bağlı olarak değişebilir. O eski değerini yazmaz yani Sonuçta, Apache önek ekler.

Örneğin, benim sitede ben istemci SSL sertifikaları ile istemci kimlik doğrulaması yapmak için mod_ssl kullanın. (Kullanıcının e-posta adresini içeren) Sertifikanın konu SSL_CLIENT_S_DN değişken olarak depolanır. : Apache önek ile, bu gibi çıkacaktır

$_SERVER['REDIRECT_REDIRECT_SSL_CLIENT_S_DN'] // string containing the subject
$_SERVER['REDIRECT_SSL_CLIENT_S_DN'] // exists, but empty
// $_SERVER['SSL_CLIENT_S_DN'] does not exist

Yukarıda yazdığım GETENV () işlevi üst birini dönecektir.

Bu genel bir PHP şeydir. Bazı çerçeveler dahili yönlendirme politikalarına göre yönlendirme sayfalarına. Eğer bir çerçevenin dışında yönlendirmek Eğer aynı sonucu alırsınız.

A direct access to a page outside of a framework will give you the names you initially expected. I do notice though that in CodeIgniter you get $_SERVER['REMOTE_USER'] and no redirect. So it is dependent on which framework you use.

Bu yüzden kontrol etmek en iyisi hem sizin oluyor bir yönlendirme var olmadığı konusunda emin değilseniz.

Ben de size AuthVasUseBasic On kullanıyorsanız dikkat. Bu kullanıyorsanız, aynı zamanda temel kullanıcı yetkilendirme değişken $_SERVER['USERNAME'] IIRC için kontrol etmelisiniz