|
8.2 Как обновить хэш только что записанного пароля? | ☑ | ||
---|---|---|---|---|
0
Rounder
16.08.12
✎
11:46
|
8.2.15.294
УФ Делается процедура смены пароля. Перед допуском к форме изменения пароля проверяется текущий пароль пользователя. Насколько я понимаю сравнить можно только хэши паролей. При записи проверочного пароля в базу хэш пароля пользователя не обновляется. Т.о. получаем всегда верный проверочный пароль. Хэш пароля обновляется только с перезаходом пользователя в программу. Есть ли методы обновить хэш без выхода пользователя из 1С? |
|||
1
Rounder
16.08.12
✎
12:22
|
Актуально.
|
|||
2
Lama12
16.08.12
✎
12:30
|
Не понял вопрос.
Это свой механизм паролей или стандартный? |
|||
3
Rounder
16.08.12
✎
12:40
|
(2) Свой. Конфа с нуля пишется.
Но и в УПП стандартного не нашел. Есть наводка? |
|||
4
ptiz
16.08.12
✎
12:46
|
Юзер = ПользователиИнформационнойБазы.НайтиПоИмени(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
Сообщить(Юзер.СохраняемоеЗначениеПароля); Выдает новое значение. |
|||
5
Rounder
16.08.12
✎
12:56
|
(4) Версия платформы какая?
|
|||
6
Rounder
16.08.12
✎
13:01
|
&НаСервере
Функция ПроверкаПароля() Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); ХэшАвторизации = Пользователь.СохраняемоеЗначениеПароля; Пользователь.Пароль = ТекущийПароль; //Значение пароля для проверки с сущ.паролем Пользователь.Записать(); ХэшПроверПароля = Пользователь.СохраняемоеЗначениеПароля; Если ХэшАвторизации = ХэшПроверПароля Тогда Возврат Истина; Иначе Пользователь.СохраняемоеЗначениеПароля = ХэшАвторизации; Пользователь.Записать(); Возврат Ложь; КонецЕсли; КонецФункции Всегда возвращает истину |
|||
7
ptiz
16.08.12
✎
13:09
|
(6) ох....
&НаСервере Функция ПроверкаПароля() Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); ХэшАвторизации = Пользователь.СохраняемоеЗначениеПароля; Пользователь.Пароль = ТекущийПароль; //Значение пароля для проверки с сущ.паролем Пользователь.Записать(); ХэшПроверПароля = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь.Имя).СохраняемоеЗначениеПароля; Если ХэшАвторизации = ХэшПроверПароля Тогда Возврат Истина; Иначе Пользователь.СохраняемоеЗначениеПароля = ХэшАвторизации; Пользователь.Записать(); Возврат Ложь; КонецЕсли; КонецФункции |
|||
8
Rounder
16.08.12
✎
13:11
|
(7) Что не так?
|
|||
9
Rounder
16.08.12
✎
13:13
|
Соррь
ХэшПроверПароля = Пользователь.СохраняемоеЗначениеПароля; Та строка осталась от пробы иной реализации через временного пользователя. |
|||
10
ptiz
16.08.12
✎
13:15
|
(9) Т.е. код из 7 не работает? Не верю.
|
|||
11
Rounder
16.08.12
✎
13:18
|
(10) Ну я тож не верил...
А не работает. Всегда возвращает ХэшАвторизации и ХэшПроверПароля одинаковыми. Отладчик на каждой стадии программы тоже показывает хэш неизменным. Какая у тебя версия платформы, где такой код (7) работает? |
|||
12
Rounder
16.08.12
✎
13:20
|
Но если в (7) дойти до конца, т.е. вывалиться по Истине (т.о. пароль пользователя изменится), выйти из режима Предприятие и войти снова. То уже при авторизации примет только новый пароль и хэш отладчик покажет уже новый.
|
|||
13
ptiz
16.08.12
✎
13:27
|
Запусти этот код
ТекЮзер = ПользователиИнформационнойБазы.ТекущийПользователь(); СтароеСохраняемоеЗначениеПароля = ТекЮзер.СохраняемоеЗначениеПароля; ТекЮзер.Пароль = "123456789"; ТекЮзер.Записать(); НовоеСохраняемоеЗначениеПароля = ПользователиИнформационнойБазы.НайтиПоИмени(ТекЮзер.Имя).СохраняемоеЗначениеПароля; Если СтароеСохраняемоеЗначениеПароля = НовоеСохраняемоеЗначениеПароля Тогда Сообщить("СОВПАДАЕТ. ОБЛОМ."); Иначе Сообщить("ВСЁ РАБОТАЕТ"); КонецЕсли; ТекЮзер.СохраняемоеЗначениеПароля = СтароеСохраняемоеЗначениеПароля; ТекЮзер.Записать(); |
|||
14
Rounder
16.08.12
✎
13:37
|
(13) Работает
Отличия лишь в том, что новый пароль в коде задан явно, а в нашем случае берется из поля ввода формы. И вместо ХэшПроверПароля = Пользователь.СохраняемоеЗначениеПароля написано НовоеСохраняемоеЗначениеПароля = ПользователиИнформационнойБазы.НайтиПоИмени(ТекЮзер.Имя).СохраняемоеЗначениеПароля. Почему тогда одно работает, другое нет? |
|||
15
ptiz
16.08.12
✎
13:41
|
Так всё и дело в ПользователиИнформационнойБазы.НайтиПоИмени()
ПользователиИнформационнойБазы.ТекущийПользователь() - видимо, закэширован А ПользователиИнформационнойБазы.НайтиПоИмени() - получает новые данные из базы |
|||
16
Rounder
16.08.12
✎
13:41
|
Т.е. получается что в нашем случае в строке ХэшПроверПароля = Пользователь.СохраняемоеЗначениеПароля; хэш брался из кэша, а в твоем мы обращаемся уже к базе для поиска юзера кэш обновляется либо уже берется не из него. Или есть другое объяснение?
|
|||
17
Rounder
16.08.12
✎
13:42
|
(15) В одно время написали. :)
Спасибо за помощь! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |