2016-07-20 11 views
6

Я заранее извиняюсь за задание довольно загадочного вопроса. Однако я не понимал этого, несмотря на много материала. Было бы здорово, если бы вы могли пролить свет на это.Как обращаться с request_loader Flask-Login в user_loader?

Какова цель request_loader в флэше? Как он взаимодействует с декоратором user_loader?

Если я использую систему проверки подлинности на основе токенов (планирую отправить токен на мой внешний интерфейс angularJS, сохраняя там токен и отправляя этот токен в заголовок авторизации-токена), мне нужен request_loader или будет user_loader (где я проверяю заголовок auth и вижу, существует ли пользователь)?

+0

Я заинтересован в этом то же самое –

+0

«Я планирую на отправку маркер моего angularJS внешнего интерфейса, сохраняя маркер там и отправки этот маркер в авторизации-маркер заголовка» Я заинтересован в выполнении то же самое! Можете ли вы пояснить, как вы используете (d) request_loader для достижения этого? Угловая $ http автоматически использует те же файлы cookie, что и другие запросы браузера? Нужно ли нам делать «отправку маркера в мою угловую переднюю часть»? Меня беспокоит, что идентификатор сеанса может быть отправлен другим заголовком или параметром (поэтому мне может понадобиться request_loader) - но не будет ли он входить в систему в браузере по-прежнему автоматически отправлять его? –

+0

Привет, Зак, Извините за задержанный ответ. Насколько я понимаю, на самом деле вам не нужны как пользовательские, так и поисковые загрузчики. Пользовательский загрузчик очень прост, он проверяет user_id, который присваивается сеансу, и проверяет, существует ли этот user_id в вашей пользовательской базе данных и проходит проверку подлинности. Загрузчик запросов проверяет авторизатор запроса и выполняет ту же проверку подлинности. Поэтому для большинства приложений, которые имеют какое-либо управление сеансом пользователя, вам не потребуется загрузчик запросов. Вам не придется отправлять какие-либо токены ... Фласки и угловые js управляют ими автоматически с помощью user_loader – galeej

ответ

2

Из Колба-Логин documentation:

Иногда вы хотите, чтобы войти в систему пользователей без использования куки, например, с помощью значения заголовка или ключа апи, переданного в качестве аргумента запроса. В этих случаях вы должны использовать обратный вызов request_loader. Этот обратный вызов должен вести себя так же, как ваш user_loader callback, за исключением того, что он принимает запрос Flask вместо user_id.

Итак, чтобы ответить на ваш вопрос, они оба выполняют ту же функцию для Flask-Login. Они оба используются для загрузки пользователя. request_loader, однако, подходит для пользовательских логинов.

Вот отличный учебник, я обнаружил, что использует request_loader воспользоваться ключом аутентификации на основе (Пост не мои, я просто обмен на ссылку): http://gouthamanbalaraman.com/blog/minimal-flask-login-example.html

0

Для проверки пользователей session_id Фляги-Вход в для запросов внешнего интерфейса через Angular, вы должны установить флаг конфигурации withCredentials на true.

То есть, если вы используете Угловой-х $http.post(url,data [,config]) или $http.get(url [,config]), убедитесь, что config объект содержит набор свойства withCredentials истину. Это даст указание браузеру использовать его файлы cookie таким же образом, как и при полнофункциональном посещении страницы.

Например,

$http.post('/api/login',{username:'myusername',password:'mypassword'},{withCredentials:true}) 

будет post Расширенные данные {username:'myusername',password:'mypassword'} на ваш сайт//api/login маршрут приложения и, если вы используете колбовую Логин и войти в систему, настой будет знать.

Вы можете установить это поведение для всех$http запросов на обслуживание установки

$httpProvider.defaults.withCredentials=true 

где-то в вашем приложении. В настоящее время, у меня есть эта строка кода в моем app.config блоке, который кажется подходящим для меня:

var myApp = angular.module('myApp'); 

myApp.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    }); 

(Поскольку этот пост о Колба, люди могут посылать данные формы через Угловое таким образом, что он может можно найти в request.form, который имеет аналогичное решение, fyi.)

+0

Привет Зак ... Да. Это будет работать, если у вас есть загрузчик запросов. Однако обратите внимание, что имя пользователя и пароль будут видны всем, кто имеет доступ к кодовой базе (когда вы размещаете веб-сайт ... это в основном весь мир) ... Таким образом, это может представлять угрозу безопасности (возможно). – galeej

+0

Привет @galeej, не могли бы вы рассказать об этом больше? Мой пример совершенно странный, я признаю, что во время входа в систему я показывал учетные данные, что является одним из тех случаев, когда не имеет смысла передавать учетные данные; учетные данные, отправленные Angular с этой конфигурацией, - это просто ваш session_id, поскольку он является файлом cookie в формате Flask-login. Таким образом, электронная почта и пароль фактически не отправляются в произвольные вызовы $ http. Все, что было сказано, мне все еще любопытно, почему вы подозреваете, что кто-либо с доступом к «кодовой базе» будет иметь доступ к любой пользовательской информации и, кроме того, почему «весь мир» имел бы это –