🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.www.server-side
6 messages
6 total messages Started by Jivanmukta Sun, 19 Feb 2017 07:39
newbie: logowanie przed wejściem na podstronę administracyjnę
#61507
Author: Jivanmukta
Date: Sun, 19 Feb 2017 07:39
24 lines
1814 bytes
Napisałem witrynę w LAMP, framework CodeIgniter. Witryna składa się z 
(zasadniczo) dwóch podstron: 
1. głównej, dla użytkowników
2. administracyjnej (raporty, backupy itp.)
Użytkownicy będą wchodzili na stronę 1 z Google. Natomiast ja z kolegą 
będziemy korzystali ze strony 2 (która nie będzie widoczna w Google), przy 
czym chciałbym, żeby była potrzeba zalogowania się przed wykonaniem operacji 
administracyjnych (2 konta: moje i kolegi). 
Wykorzystałem SSL - umieściłem .htaccess w public_html. Plik .htaccess 
zawiera:

AuthUserFile "/home/ja/application/resources/.htpass"
AuthName "Strony zabezpieczone"
AuthType Basic
require valid-user
ErrorDocument 401 "/home/ja/public_html/denial.html"
DirectoryIndex index.php

Jednak przy takim rozwiązaniu przeglądarka pyta o hasło także przy stronie 1 
(dla użytkowników).
Jak to zrobić, żeby logowanie było wymagane tylko przy stronie 
administracyjnej? (Na wszystkie strony wchodzi się przez plik startowy 
public_html/index.php CodeIgnitera.)
Byłbym wdzięczny za podpowiedź.
Re: newbie: logowanie przed wejściem na podstronę administracyjnę
#61501
Author: Borys Pogoreło
Date: Mon, 20 Feb 2017 16:45
16 lines
1590 bytes
Dnia Sun, 19 Feb 2017 08:39:34 +0100, Jivanmukta napisał(a):

> Użytkownicy będą wchodzili na stronę 1 z Google. Natomiast ja z kolegą 
> będziemy korzystali ze strony 2 (która nie będzie widoczna w Google), przy 
> czym chciałbym, żeby była potrzeba zalogowania się przed wykonaniem operacji 
> administracyjnych (2 konta: moje i kolegi). 
> Wykorzystałem SSL - umieściłem .htaccess w public_html. Plik .htaccess 

W ten sposób zabezpieczysz dany *katalog*. Aplikacja w CI zapewne ma jeden
wspólny plik startowy, więc to rozwiązanie tu nie ma sensu. Czemu po prostu
nie użyjesz mechanizmów uwierzytelniania, które na pewno są wbudowane we
framework?

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: newbie: logowanie przed wejściem na podstronę administracyjnę
#61503
Author: Jivanmukta
Date: Tue, 21 Feb 2017 04:21
11 lines
1515 bytes
W dniu 2017-02-20 o 17:45, Borys Pogoreło pisze:
> Czemu po prostu nie użyjesz mechanizmów uwierzytelniania, które na pewno są wbudowane we
> framework?
>
Dzięki za podpowiedź.
Zrobię tak: http://www.php.rk.edu.pl/w/p/uwierzytelnianie-http/
W CodeIgniterze nie ma uwierzytelniania, to prosty framework.

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: newbie: logowanie przed wejściem na podstronę administracyjnę
#61506
Author: Jivanmukta
Date: Wed, 22 Feb 2017 12:22
47 lines
2733 bytes
W dniu 2017-02-21 o 05:21, Jivanmukta pisze:
> Zrobię tak: http://www.php.rk.edu.pl/w/p/uwierzytelnianie-http/

Zrobiłem tak:
Plik controllers/Admin.php zawiera:

public function index() {
	$users = explode('|', ADMINS);
	$passwords = explode('|', PASSWORDS);
	$currentAdmin = $this->common->identifyCurrentAdmin();
	if ($passwords[$currentAdmin] != $_SERVER['PHP_AUTH_PW'] || 
!in_array($currentAdmin, $users)) {
		header("WWW-Authenticate: Basic realm=Logowanie do systemu");
		header("HTTP/1.0 401 Unauthorized");
		show_error(ERRMSG_LOGIN_FAILED);
		return;
	}
     ...
     $this->load->view('admin/index', $params);
}

Plik libraries/Common.php zawiera:

// ustalenie bieżącego administratora:
public function identifyCurrentAdmin() {
     $admin = $this->ci->session->userdata('currentAdmin');
     if (is_empty($admin)) {
         if (isset($_SERVER['PHP_AUTH_USER']) && 
!is_empty($_SERVER['PHP_AUTH_USER'])) {
             $this->ci->session->set_userdata('currentAdmin', 
$_SERVER['PHP_AUTH_USER']);
         } elseif (isset($_SERVER['REDIRECT_REMOTE_USER']) && 
!is_empty($_SERVER['REDIRECT_REMOTE_USER'])) {
             $this->ci->session->set_userdata('currentAdmin', 
$_SERVER['REDIRECT_REMOTE_USER']);
         }
     }
     return $this->ci->session->userdata('currentAdmin');
}

i nie wyświetla mi się okienko z pytaniem o użytkownika i hasło. 
Domyślam się, że coś powinienem wpisać do wamp\www\.htaccess, ale nie 
wiem co. Proszę o pomoc.

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: newbie: logowanie przed wejściem na podstronę administracyjnę
#61510
Author: Jivanmukta
Date: Sun, 26 Feb 2017 17:15
5 lines
1081 bytes
Jivanmukta wrote:
> W dniu 2017-02-21 o 05:21, Jivanmukta pisze:
>> Zrobię tak: http://www.php.rk.edu.pl/w/p/uwierzytelnianie-http/

Chyba wreszcie zrozumiałem: muszę zrobić formularz logowania.
Re: newbie: logowanie przed wejściem na podstronę administracyjnę
#61511
Author: Jivanmukta
Date: Wed, 01 Mar 2017 18:38
70 lines
3518 bytes
W dniu 2017-02-22 o 13:22, Jivanmukta pisze:
> W dniu 2017-02-21 o 05:21, Jivanmukta pisze:
>> Zrobię tak: http://www.php.rk.edu.pl/w/p/uwierzytelnianie-http/
>
> Zrobiłem tak:
> Plik controllers/Admin.php zawiera:
>
> public function index() {
>     $users = explode('|', ADMINS);
>     $passwords = explode('|', PASSWORDS);
>     $currentAdmin = $this->common->identifyCurrentAdmin();
>     if ($passwords[$currentAdmin] != $_SERVER['PHP_AUTH_PW'] ||
> !in_array($currentAdmin, $users)) {
>         header("WWW-Authenticate: Basic realm=Logowanie do systemu");
>         header("HTTP/1.0 401 Unauthorized");
>         show_error(ERRMSG_LOGIN_FAILED);
>         return;
>     }
>     ...
>     $this->load->view('admin/index', $params);
> }
>
> Plik libraries/Common.php zawiera:
>
> // ustalenie bieżącego administratora:
> public function identifyCurrentAdmin() {
>     $admin = $this->ci->session->userdata('currentAdmin');
>     if (is_empty($admin)) {
>         if (isset($_SERVER['PHP_AUTH_USER']) &&
> !is_empty($_SERVER['PHP_AUTH_USER'])) {
>             $this->ci->session->set_userdata('currentAdmin',
> $_SERVER['PHP_AUTH_USER']);
>         } elseif (isset($_SERVER['REDIRECT_REMOTE_USER']) &&
> !is_empty($_SERVER['REDIRECT_REMOTE_USER'])) {
>             $this->ci->session->set_userdata('currentAdmin',
> $_SERVER['REDIRECT_REMOTE_USER']);
>         }
>     }
>     return $this->ci->session->userdata('currentAdmin');
> }
>
> i nie wyświetla mi się okienko z pytaniem o użytkownika i hasło.

Zrobiłem tak i jest dobrze:

public function index() {
	if (!isset($_SERVER['PHP_AUTH_PW'])) {
		header('HTTP/1.0 401 Authorization Required');
		header("WWW-Authenticate: Basic realm=Logowanie do systemu");
	} else {
		$currentAdmin = $this->common->identifyCurrentAdmin();
		$users = explode('|', ADMINS);
		$passwords = explode('|', PASSWORDS);
		if (!isset($_SERVER['PHP_AUTH_PW']) || 
($passwords[array_search($currentAdmin, $users)] != 
$_SERVER['PHP_AUTH_PW'] || !in_array($currentAdmin, $users))) {
			header("WWW-Authenticate: Basic realm=Logowanie do systemu");
			header("HTTP/1.0 401 Unauthorized");
			show_error(ERRMSG_LOGIN_FAILED);
			return;
		}
	}
...

Problem zamknięty.


---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads