как узнать текущего пользователя python

Как получить текущего пользователя при реализации 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)

Читайте также:  как убрать аэро в windows 10

Вы также можете использовать:

Вы, вероятно, можете использовать:

Но это не будет безопасным, потому что переменные среды могут быть изменены.

Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, 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 нужны заявления.

Читайте также:  как посмотреть содержимое папки в командной строке windows

Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, 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.

Источник

Образовательный портал