2016-07-20 9 views
6

私は、あまりにも謎めいた質問をするために事前にお詫びします。しかし、私はそれを理解しませんでした。あなたがこれについていくつかの光を当てることができれば、素晴らしいことでしょう。Flask-Loginのrequest_loaderはuser_loaderにどのように関係していますか?

フラスコログインのrequest_loaderの目的は何ですか? user_loaderデコレータとはどのように対話しますか?

トークンベースの認証システムを使用している場合(私は、angularJSフロントエンドにトークンを送信し、そこにトークンを格納し、そのトークンを認証トークンヘッダーに送信する予定です)、request_loaderまたはwill user_loader(authヘッダーをチェックして、ユーザーが存在するかどうかを確認します)で十分ですか?フラスコ-ログインdocumentationから

+0

私は同じことをやってに興味を持っています –

+0

を「私はそこにトークンを格納し、認証トークンヘッダにそのトークンを送信して、私のangularJSフロントエンドにトークンを送ることを計画してい」私がやってに興味同じこと!これを達成するために(d)request_loaderをどのように使用するかを明確にすることはできますか? Angularの$ httpは他のブラウザのリクエストと同じCookieを自動的に使用しますか? 「私のangularJSフロントエンドにトークンを送る」の部分を行う必要がありますか?私の懸念は、セッションIDが別のヘッダーやパラメータ(なぜ私はrequest_loaderが必要なのでしょうか)で送信される可能性がありますが、ログインしているブラウザは自動的にそれを送信しませんか? –

+0

こんにちはザック、遅れて申し訳ありません。私が理解しているところから、実際にはユーザーとリクエストローダーの両方を持つ必要はありません。ユーザーローダーは非常に簡単で、セッションに帰属するuser_idをチェックし、そのuser_idがユーザーデータベースに存在し、認証されているかどうかを確認します。要求ローダーは、要求authorizationheaderをチェックし、同じ認証を行います。したがって、あらゆる種類のユーザーセッション管理を持つほとんどのアプリケーションでは、要求ローダーは必要ありません。あなたはトークンを送る必要はありません...フラスコと角度ジェスは、それらを自動的にuser_loaderで管理します – galeej

答えて

2

時々、あなたは、このような ヘッダ値またはクエリの引数として渡されたAPIキーを使用するなど、クッキーを使用せずに、ユーザーにログインします。この場合、 request_loaderコールバックを使用する必要があります。このコールバックは がuser_loaderコールバックと同じように動作する必要があります。ただし、user_idの代わりに Flaskリクエストを受け付ける点が異なります。

あなたの質問に答えるために、彼らは両方ともFlask-Loginに同じ機能を果たします。それらはどちらもユーザーを読み込むために使用されます。ただし、カスタムログインにはrequest_loaderが適しています。

ここで私はそれがトークンベースの認証(ポストは自分ではない、私は単にリンクを共有しています)を利用するためにrequest_loaderを利用した素晴らしいチュートリアルです:フラスコ-ログインのSESSION_IDを持つユーザーを確認するにはhttp://gouthamanbalaraman.com/blog/minimal-flask-login-example.html

0

は、フロントエンド要求の場合、withCredentialsの設定フラグをtrueに設定する必要があります。

あなたが角度の$http.post(url,data [,config])$http.get(url [,config])を使用している場合、ある、configオブジェクトがtrueにプロパティwithCredentialsセットが含まれていることを確認してください。これにより、ブラウザは完全なページ訪問の場合と同じ方法でクッキーを使用するよう指示されます。例えば

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

サイト/アプリの/api/loginルートにデータ{username:'myusername',password:'mypassword'}postだろうと、あなたはフラスコ・ログインを使用していて、ログインしている場合は、フラスコを知っているだろう。

あなたはあなたのアプリケーションのどこかで

$httpProvider.defaults.withCredentials=true 

を設定することにより、すべて$httpサービス要求のために、この動作を設定することができます。現在、私は私に適切と思われる私のapp.configブロック、内のコードの行を持っている:

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

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

(この記事は、フラスコについてですので、人々はそれができるように角度によるフォームデータを送信することもできます類似の溶液fyiを有するrequest.formに見いだすことができる。)

+0

こんにちはZach ...はい。これは、要求ローダーがある場合に機能します。しかし、ユーザ名とパスワードは、コードベースへのアクセス権を持つすべての人に見えることに注意してください(Webサイトをホストすると、それは基本的に全世界です)...これはセキュリティリスクを引き起こす可能性があります。 – galeej

+0

こんにちは@galeej、これについてもっと詳しくお聞かせください。私の例は完全に奇妙です、私は認める - 私はログイン中に資格を渡すことを示しました。これは資格を渡すのはあまり意味がありません。このコンフィグレーションでAngularによって送信された資格情報は、単にあなたのsession_idです。これは、Flask-loginによってCookie形式になっているためです。したがって、電子メールとパスワードは、実際には、任意の$ http呼び出しで送信されるわけではありません。あなたが「コードベース」へのアクセス権を持つ誰もが、あらゆるユーザ情報にアクセスできると疑っているのはなぜか、私はまだ不思議です。 –

関連する問題