Как получить текущего пользователя при реализации Python Flask-Security?
Я использую Flask-Security для настройки аутентификации пользователя для моего приложения, но я борюсь за получение адреса электронной почты или идентификатора текущего пользователя, вошедшего в систему, чтобы я мог запросить таблицу с данными этого конкретного пользователя. Я просто использую стандартный код.
Другой вопрос здесь предложил следующее, но это не так т работа:
4 ответа
Майкл был наполовину прав, проблема в том, что стандартный пример кода не импортирует сеансы, а в то время как безопасность флешки в бэкэнде устанавливает сеанс, он не доступен в вашем приложении фляги. Этот код от Майкла:
Хотя правильное значение в стандартном приложении, скорее всего, будет нарушено при работе с flb-security или, по крайней мере, в этом нет необходимости, поскольку flask-security полностью контролирует маршрут / login и обеспечивает безопасную обработку формы. Только два изменения, необходимые для примера приложения колбы:
Изменение строки импорта колбы на:
Это пример получения идентификатора пользователя из сеанса:
Для этого лучше использовать сессию. Вы можете хранить информацию о сеансе, а затем использовать ее где угодно.
В вашей функции входа в систему просто сохраните значение как: сначала импортируйте сессию из фляги. Затем используйте как это.
Затем используйте его как << session['username'] >> в своем шаблоне.
Вы можете использовать flask_login.current_user объект. Его класс будет тем, что вы настроили в Flask-Security для управления пользователями, например, User для кода, который вы включили.
ИМХО, вы можете реализовать sessions из Flask.
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли портативный способ получить имя пользователя текущего пользователя в Python (то есть тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать как os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ достижения этой цели. под, скажем, Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
12 ответов
Доступность: Unix, Windows
Постскриптум В комментариях ниже « эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, для любой другой цели, поскольку она позволяет любому пользователю выдавать себя за другого»). любой другой). «
Используя только стандартные библиотеки Python:
Работает на Windows, Mac или Linux
Кроме того, вы можете удалить одну строку с немедленным вызовом:
Некоторое время назад я написал модуль plx для переноса имени пользователя в Unix и Windows (среди прочего): http://www.decalage.info/en/python/plx
(для Windows требуются расширения win32)
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т.е. имя пользователя).
Для меня использование os модуля выглядит лучше всего для переносимости: лучше всего работает как в Linux, так и в Windows.
Дом пользователя Dir: C: \ Users \ myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Лучше всего было бы объединить os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы можете получить текущее имя пользователя в Windows, пройдя через Windows API, хотя вызывать его немного через FFI ctypes (GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid).
Я написал небольшой модуль, который может сделать это прямо из Python, getuser.py. Применение:
изменить Я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Мне кажется, что легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли портативный способ получить имя пользователя текущего пользователя в Python (т. Е. Тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать так os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ достижения этого, скажем, в Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
Посмотрите на модуль getpass
Доступность: Unix, Windows
ps На комментарий ниже » эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, в любых других целях, поскольку она позволяет любому пользователю выдавать себя за любое другое ). «
Лучше всего было бы сочетать os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Это может сработать. Я не знаю, как они ведут себя при работе в качестве службы. Они не переносимы, но для этого os.name и if нужны заявления.
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т.е. имя пользователя).
Для меня использование os модуля выглядит лучше всего для переносимости: лучше всего работает как на Linux, так и на Windows.
Дом пользователя Dir: C: \ Users \ myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Совмещенный pwd и getpass подход, основанный на других ответах:
редактировать: я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Мне кажется, что это легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли переносимый способ получить имя пользователя текущего пользователя в Python (т. Е. Тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать как os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ добиться этого, скажем, в Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
15 ответов
Посмотрите на модуль getpass
Доступность: Unix, Windows
ps В комментариях ниже «эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, в любых других целях, поскольку она позволяет любому пользователю выдавать себя за любое другое).«
Лучше всего было бы объединить os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Это может сработать. Я не знаю, как они ведут себя при работе в качестве службы. Они не являются переносимыми, но для этого предназначены выражения «os.name» и «if».
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т. Е. Имя пользователя).
Для меня с помощью os модуль выглядит лучше для переносимости: лучше всего работает как на Linux, так и на Windows.
Дом пользователя Dir: C:\Users\myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Комбинированный pwd а также getpass подход, основанный на других ответах:
psutil предоставляет переносимый способ, который не использует переменные среды, такие как getpass решение. Он менее подвержен проблемам с безопасностью и, вероятно, должен быть принятым ответом на сегодняшний день.
Под капотом это объединяет getpwuid основанный на unix и GetTokenInformation метод для Windows.
Для UNIX, по крайней мере, это работает.
редактировать: я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Это интересно, но, вероятно, не идеально, если вы все равно что-то не делаете в терминале. в этом случае вы, вероятно, будете использовать os.system начать с. Например, некоторое время назад мне нужно было добавить своего пользователя в группу, что я и сделал (это в Linux, заметьте)
Мне кажется, что это легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Как найти домашний каталог реального пользователя с помощью python?
Я вижу, что если мы изменим переменную окружения HOME (linux) или USERPROFILE (windows) и запустим скрипт на python, он вернет новое значение как пользователь home, когда я попытался, os.environ [‘HOME’] os.exp
Есть ли способ найти домашний каталог реального пользователя, не полагаясь на переменную среды?
изменить
Один из способов найти Windows Home с помощью Pywin32,
9 ответов
Я думаю, что os.path.expanduser(path) может быть полезным.
В Unix и Windows верните аргумент с заменой начального компонента
user на домашний каталог этого пользователя.
Если расширение завершается неудачно или путь не начинается с тильды, путь возвращается без изменений.
Итак, вы могли просто сделать:
Работает в Python 3.5 и выше. Path.home() возвращает Path объект, предоставляющий API 15
Даст вам ссылку на домашний каталог текущего пользователя и
Даст вам ссылку на файл ниже;
Действительно, изменение переменной среды указывает, что дом должен быть изменен. Таким образом, каждая программа / сценарий должна иметь новый дом в контексте; также последствия до человека, который изменил это. Я бы еще придерживался home = os.getenv(‘USERPROFILE’) or os.getenv(‘HOME’)
Что именно требуется?
Получить (переведенные) имена пользовательских папок в Linux:
Это должно работать на Windows и Mac OS, хорошо работает на Linux.



