LINUX.ORG.RU

Как сделать WEB аутентификацию пользователей по файлу, просьба привести простой пример на perl.

 ,


0

1

плохо видимо искал - не нашел, можно ссылкой, можно ткнуть на то что почитать.
После буду переносить на mojolicious

Нужно чтобы появлялось типа окошко с именем пользователя и паролем + кнопка залогиниться и дальше в зависимости от результата

И такой вопрос - как, где на сервере запоминается состояние того что пользователь прошел аутентификацию и далее это использовать (не спрашивать пользователя пока он не нажмет кнопку выход) ?
как это попроще сделать или как это правильно делают?

★★★★

Проще всего через htaccess (Basic Auth), это делает твой вебсервер.

И такой вопрос - как, где на сервере запоминается состояние того что пользователь прошел аутентификацию и далее это использовать (не спрашивать пользователя пока он не нажмет кнопку выход) ?

По кукам.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

по текстовому файлу нужно, далее в зависимости от пользователя - буду рисовать разные интерфейсы

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

Ну ты и будешь по текстовому аутентифицировать, потом через mod_revrite perl получает инфу о том, какой пользователь залогинился (логин), дальше на основе этого уже рисуешь интерфейс.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

а если захочу аутентифициоровать по пользователям которые в БД ?
mod_revrite - это думаю лишнее или без этого никак ?

Vlad-76 ★★★★
() автор топика
Последнее исправление: Vlad-76 (всего исправлений: 1)

в скрипте проверяешь куку. куки нет - рисуешь экран входа. на входе юзер дает файл, ты смотришь в своей БД то ли это. то - ставишь куку.

В куке храни случайно генерируемый cид, и этот cид пихай в базу к юзеру при логине.

Kesha_Molchanov
()
Ответ на: комментарий от Vlad-76

а я уже запилил себе SessionManager для этих целей. В куках храню хеш. В каждом контроллере проверяю, что хранится в куке, валидирую с БД и выдаю новую куку. По идее, подмена исключена.

bvn13 ★★★★★
()
Ответ на: комментарий от Vlad-76

похоже что на mojo уже много что есть, а то приготовился к низкоуровневой реализации

Нету там никакой низкоуровневой реализации. Если простым языком, есть форма входа которая принимает логин/пароль и отправляет на сервер, сервер проверяет соответствие по базе пользователей и в случае совпадения создает сессию + идентификатор сессии, идентификатор сервер отправляет пользователю в куки. При следующем заходе браузер передает серверу куки, сервер проверяет есть ли сессия с идентификатором из куков, если есть все ок, если нет редиректит на форму входа. как хранить сессии без разницы, хоть файлами хоть в бд...

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

выход - очистка куков + сессии удаляются при отсутствии активности например больше 24 часов.

ах да, ну и в сессии на сервере хранится ид пльзователя из базы, то есть что бы было соответстиве ид сессии = ид пользователя.

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от bvn13

в случае если пользователь выходит из сессии как Вы удаляете cookies из его броузера?
как часто выдаете новые куки - запускаете какой нить ajax скрипт на клиенте периодически?

а что за контроллеры такие?

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

контроллеры https://metacpan.org/pod/Mojolicious::Controller

внутри них в самом начале пишу

    my $sessMgr = PhM::SessionManager->new(session => $self->session)->loadWithSuid;
    if (!$sessMgr) {
        return $self->redirect_to('auth');
    }

Делаю авторизацию по ключу из кук в PhM::SessionManager. При этом в сессию подгружается инфа о юзере. Если возвратилось true, то это экземпляр моей сессии. Если false - то это либо неправильная кука, либо разлогинился по таймлайфу куки. В любом случае - редирект на авторизацию. И как раз в методе loadWithSuid происходит валидация ключа в сессии и выдача нового (сразу помещается в куку).

при разлогоне достаточно кильнуть куку (https://metacpan.org/pod/release/SRI/Mojolicious-4.75/lib/Mojolicious/Session...):

# Delete whole session by setting an expiration date in the past
$c->session(expires => 1);

bvn13 ★★★★★
()

Можно взять Dancer например. Простой до безобразия фреймворк, просто вешаются на URL процыдурки безо всяких объектно ориентрированных и прочих MVC изысков. В коробке в том числе аутентификации всех мастей.

Hoodoo ★★★★★
()
Ответ на: комментарий от TDrive

а что значит сессия на сервере - что это такое? файл или веб сервер у себя ее хранит в оперативке и при каждом вызове скрипта передает скрипту?
получается что нужно еще в файле хранить id сессии чтобы из него id пользователя выковыривать.

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Hoodoo

от Dancer отговорили на форуме, я поверил на слово :). MVC меня и пугал с самого начала. Но говорят Mojo::Lite типа почти как Dаncer без MVC
ПОка на самом деле еще ничего не написал - морально готовлюсь и набираю знания
а есть пример аутентификации на Dаncer ? Сравню по сложности.
Кто то сказал что Dancer не живой, судя по правкам на https://github.com/PerlDancer/Dancer живой.

Vlad-76 ★★★★
() автор топика
Последнее исправление: Vlad-76 (всего исправлений: 1)
Ответ на: комментарий от bvn13

и что контроллирует этот контроллер - типа колбек - вызывается по событию - при вызове http метода? этот MVC темный лес...

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

по урлу через маршрут Route определяется класс и метод, который должны обработать этот урл. Вот класс и метод обработчики и есть контроллер.

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

не совсем понятно «Вот класс и метод обработчики и есть контроллер.»
насколько я помню в ООП у класса есть методы и свойства. Создаем свой объект наследуем все методы и свойства от родительского класса. Методы можем переопределить, добавить новые.
я могу понять так в роуте создаем новый объект, переопределяем для него что нужно. Этот созданный объект и есть контроллер?

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

на любом возможно. и на лайт, и на обычном. Ссыль я дал, чтобы Вы разобрались, что есть контроллер, что роуты, а что темплейты.

bvn13 ★★★★★
()
Ответ на: комментарий от Vlad-76

сессия это такая «сущность» у которой есть ид и которая хранит какую нибудь информацию: ид пользователя открывшего сессию, время последней активности, пользовательские настройки на время сессии... То есть ту информацию которую должен получить сервер по ид сессии из куков. Как и где она хранится вообще без разницы, хоть в ассоциативном массиве, главное чтобы зная ид сессии можно было получить все что нужно.

TDrive ★★★★★
()
Ответ на: комментарий от Vlad-76

Кстати я тебе советую не хранить сессии в файлах, а потратить время на освоение mysql и хранить сессии в бд. Потому, что при работе с файлами, когда программа открывает файл на редактирование она должна заблокировать файл чтобы не получилось ситуации когда 2 программы одновременно пишут в один файл, в файле после этого может получиться каша, с другой стороны если один из потоков веб сервера откроет файл, заблокирует его, а потом зависнет, пользователь не сможет зайти на сайт потому, что после нажатия F5 будет новое подключение к серверу которое будет обрабатывать другой поток, который не сможет получить доступ к файлу и уйдет в ожидание. Что бы сайт снова стал доступен пользователю нужно будет очистить кукисы и создать новую сессию.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Если сессии=куки для маппирования в ID пользователя храню в БД то нужно следить за их временем жизни и периодически чистить - это внешний скрипт писать для чистки протухших записей (сессий)?
Если у пользователя комп зависнет - то сессия тоже может протухнуть.

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

Если сессии=куки для маппирования в ID пользователя храню в БД то нужно следить за их временем жизни и периодически чистить - это внешний скрипт писать для чистки протухших записей (сессий)?

Нет, там где у тебя выполняется проверка сессии, перед ней, вставь код который будет удалять старые сессии. То есть удаление старых сессиий будет выполняться когда кто нибудь заходит на сайт. Всем требованиям вполне соответствует.
Если ты захочешь вести какую нибудь статистику по количеству активных сессий, рисовать графики... то для удаления сессий нужно будет сделать отдельный скрипт и запускать его по крону, что бы в базе всегда была актуальная информация. Но это уже совсем другая история.)

TDrive ★★★★★
()
Ответ на: комментарий от Vlad-76

Если у пользователя комп зависнет - то сессия тоже может протухнуть.

Она протухнет даже если юзер просто перестанет заходить на сайт.

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от Hoodoo

на Danser в черновом варианте все готово, оказалось не сложно. + хранение сессий пользователей в БД.

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

Вот и здорово. Чем мне Dancer в своё время понравился - можно в нём делать только то что тебе нужно (тогда с Catalyst сравнивал). Впрочем в Mojolicious тоже так можно и там больше плюшек.

Hoodoo ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.