artem_niko Posted June 8, 2019 Share Posted June 8, 2019 Добрый день! Я бы хотел, чтобы мне пояснили на счет сессии пользователя при подключении. Дело в том, что у меня в проекте идет авторизация через пароль на форме UniLoginForm, на которой также выполняется подключение к серверу базы данных Firebird (используя логин и пароль, которые созданы для пользователя на сервере). Там же, в этой форме у меня пароль, только что авторизовавшегося пользователя, заносится в переменную типа PWideChar, т.к. пароль нужен потом для дальнейшей работы пользователя при работе с процедурами через DLL. Но, в какой-то момент у меня проходит ошибка, суть которой, согласно отладчику, заключается в том, что "неправильный логин или пароль". В связи с этим у меня вопросы: 1. Правильно ли я понял, что MainModule для каждого сеанса является уникальным для подключившегося пользователя? 2. Где мне расположить переменную, хранящую в себе пароль, чтобы он был доступен только тому пользователю, который авторизовался и только что подключился? Чтобы другие, кто авторизуется, они работали со своим паролем. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted June 8, 2019 Share Posted June 8, 2019 Добрый день. Пожалуйста, укажите какую версию и издание UniGUI используете? Quote Link to comment Share on other sites More sharing options...
artem_niko Posted June 8, 2019 Author Share Posted June 8, 2019 8 hours ago, Sherzod said: Добрый день. Пожалуйста, укажите какую версию и издание UniGUI используете? uniGUI Complete Trial Edition 1.90.0.1500 (uniGUI Equinox) Читал, что надо делать авторизацию вроде бы через LoginForm, как в одной из демок, чтобы правильно проходила авторизация. Это так? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted June 8, 2019 Share Posted June 8, 2019 http://unigui.com/doc/online_help/main_module.htm http://unigui.com/doc/online_help/login-form.htm http://unigui.com/doc/online_help/application-datamodule.htm http://unigui.com/doc/online_help/handling-concurrency.htm Quote Link to comment Share on other sites More sharing options...
artem_niko Posted June 8, 2019 Author Share Posted June 8, 2019 36 minutes ago, Sherzod said: http://unigui.com/doc/online_help/main_module.htm http://unigui.com/doc/online_help/login-form.htm http://unigui.com/doc/online_help/application-datamodule.htm http://unigui.com/doc/online_help/handling-concurrency.htm Да я читал про это. Я задал конкретный вопрос: правильно ли я понял, исходя из ссылок выше, что чтобы мне решить мою проблему с сессиями, то надо использовать авторизацию как в демке про LoginForm? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted June 8, 2019 Share Posted June 8, 2019 12 hours ago, Артем said: 1. Правильно ли я понял, что MainModule для каждого сеанса является уникальным для подключившегося пользователя? Да 12 hours ago, Артем said: 2. Где мне расположить переменную, хранящую в себе пароль, чтобы он был доступен только тому пользователю, который авторизовался и только что подключился? Чтобы другие, кто авторизуется, они работали со своим паролем. Вы можете использовать MainModule... 12 hours ago, Артем said: Но, в какой-то момент у меня проходит ошибка, суть которой, согласно отладчику, заключается в том, что "неправильный логин или пароль". Вы не даете подробную информацию, и мне не понятно где проблема Но, для авторизации Вам лучше использовать UniLoginForm Quote Link to comment Share on other sites More sharing options...
artem_niko Posted June 11, 2019 Author Share Posted June 11, 2019 On 6/9/2019 at 12:51 AM, Sherzod said: Да Вы можете использовать MainModule... Вы не даете подробную информацию, и мне не понятно где проблема Но, для авторизации Вам лучше использовать UniLoginForm Так я и использую MainModule, потому что взял демку UniLoginForm Coockies и переделал на ее основе авторизацию для проекта. Я оставил, как было в демке, переменные с логином и паролем в MainModule: type TUniMainModule = class(TUniGUIMainModule) FDConnection: TFDConnection; FDPhysFBDriverLink: TFDPhysFBDriverLink; FDTransaction: TFDTransaction; FDStoredProc1: TFDStoredProc; procedure UniGUIMainModuleBeforeLogin(Sender: TObject; var Handled: Boolean); procedure UniGUIMainModuleCreate(Sender: TObject); private public {Глобальные переменные для каждого пользователя после авторизации в рамках текущего сеанса} LoggedUser,LoggedPassword: WideString; end; В событии MainForm.UniFormShow я, для примера, взял и поместил на форму UniLabel, чтобы видеть, что при авторизации через разные браузеры у меня действительно отличаются логин и пароль для разных пользователей. И это работает. Теперь же мне надо передавать через FDStoredProc, в качестве значения, некий параметр InParam типа WideString. Процедура отрабатывает, но! Независимо от того, под каким пользователем я авторизовался у меня одинаковый результаты процедуры, а такого не должно быть, т.к. в первом случае у меня этот самый параметр InParam (под первым пользователем) отсутствует, соответственно, для первого пользователя FDStoredProc не должен возвращать для него данные, если передается пустой параметр InParam . А для второго пользователя должен вернуться набор данных, т.к. для него передается непустой параметр InParam . Исходя из этого я делаю предположение, что эта самая переменная InParam , которая объявлена у меня так: type TUniMainModule = class(TUniGUIMainModule) FDConnection: TFDConnection; FDPhysFBDriverLink: TFDPhysFBDriverLink; FDTransaction: TFDTransaction; FDStoredProc1: TFDStoredProc; procedure UniGUIMainModuleBeforeLogin(Sender: TObject; var Handled: Boolean); procedure UniGUIMainModuleCreate(Sender: TObject); private public {Глобальные переменные для каждого пользователя после авторизации в рамках текущего сеанса} LoggedUser,LoggedPassword: WideString; ResultCheck: PChar; end; function UniMainModule: TUniMainModule; var InParam: WideString; implementation .... то она на уровне сервера сохраняет свое значение. Такого быть не должно. Может быть я неправильно разместил и объявил эту переменную? Если да, то куда ее нужно положить, чтобы она, ее значение, было доступно только авторизовавшемуся пользователю, для которого создается свой экземпляр MainModule. Также, вопрос в том, в каком месте расположить код подключения к базе данных? В переменные LoggedUser и LoggedPassword соответствующие данные передаются в событии кнопки, которая располагается на UniLoginForm, т.е. сначала: код подключения к базе данных с полученными LoggedUser и LoggedPassword, а потом уже ModalResult:=mrOK формы UniLoginForm. Но, правильно так делать? 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.