Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

newbie: logowanie przed wejściem na podstronę administracyjnę

2 views
Skip to first unread message

Jivanmukta

unread,
Feb 19, 2017, 2:39:36 AM2/19/17
to
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ź.

Borys Pogoreło

unread,
Feb 20, 2017, 11:45:47 AM2/20/17
to
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

Jivanmukta

unread,
Feb 21, 2017, 12:21:16 AM2/21/17
to
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

Jivanmukta

unread,
Feb 22, 2017, 8:22:52 AM2/22/17
to
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.

Jivanmukta

unread,
Feb 26, 2017, 12:15:21 PM2/26/17
to
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.

Jivanmukta

unread,
Mar 1, 2017, 1:38:27 PM3/1/17
to
W dniu 2017-02-22 o 13:22, Jivanmukta pisze:
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.
0 new messages