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ę
Author: Jivanmukta
Date: Sun, 19 Feb 2017 07:39
Date: Sun, 19 Feb 2017 07:39
24 lines
1814 bytes
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ę
Author: Borys Pogoreło
Date: Mon, 20 Feb 2017 16:45
Date: Mon, 20 Feb 2017 16:45
16 lines
1590 bytes
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ę
Author: Jivanmukta
Date: Tue, 21 Feb 2017 04:21
Date: Tue, 21 Feb 2017 04:21
11 lines
1515 bytes
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ę
Author: Jivanmukta
Date: Wed, 22 Feb 2017 12:22
Date: Wed, 22 Feb 2017 12:22
47 lines
2733 bytes
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ę
Author: Jivanmukta
Date: Sun, 26 Feb 2017 17:15
Date: Sun, 26 Feb 2017 17:15
5 lines
1081 bytes
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ę
Author: Jivanmukta
Date: Wed, 01 Mar 2017 18:38
Date: Wed, 01 Mar 2017 18:38
70 lines
3518 bytes
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