0

ローカル戦略を使用したpassport.jsで問題が発生しています。私には2つの特定の問題があります:

  1. 最も基本的なケースのサンプルコード(以下を参照)で動作する永続的なセッションを取得していません。
  2. セッションレスになりたいです。最も基本的なケースでは、ログイン時に、セッショントークンを提供するユーザー名とパスワードを渡します。通常のリクエストでは、他のものとハッシュ化されたこのセッショントークンを使用して認証します。これはパスポートで簡単にできますか?この場合、パスポートはあまり提供されていないようで、独自のソリューションを作成する方が簡単です。標準のチェックを使用してログイン/ログアウトし、リクエストトークンをハッシュ解除してリクエストを検証するミドルウェアを使用するだけです。簡単安っぽい?

問題1:

ライブラリの参照コードを使用する:

https://github.com/jaredhanson/passport-local/blob/master/examples/login/app.js

一連のコマンドを実行して、ログアウトとログインを表示します。

A.ログインしていない/accountを確認してください

curl -v localhost:3000/account

予想通り、/loginにリダイレクトされます

<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>

B.ログイン

curl -v -d "username=bob&password=secret" http://127.0.0.1:3000/login

また、予想どおり、/へのリダイレクトを取得します

<p>Moved Temporarily. Redirecting to <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a></p>

C. / accountを確認し、ログインします

curl -v localhost:3000/account

なんてこったい???

<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>
4

2 に答える 2

6

1 の場合、セッション サポートでは、サーバー側で Cookie を構成し、ユーザー エージェントで使用する必要があります。通常、これはブラウザーであり、各要求で Cookie を送信し、サーバーはそれらを使用してログイン状態を復元します。

ただし、使用している curl コマンドは Cookie を送信しないため、各リクエストはサーバーにとって「新しい」ように見えます。そのため、毎回ログインへのリダイレクトが表示されます。ブラウザで同じリクエストを試すと、期待どおりに機能すると思います。

2に関しては、良い解決策を提案するには、もう少し詳細が必要です。HTML と Web ブラウザーを使用してサイトにアクセスしている場合、セッションのようなものが必要になります。Cookie ではなくクエリ パラメータでこの情報を毎回送信することもできますが、Express/Connect がすぐに提供するものの多くを再構築することになります。

いずれにせよ、そのルートをたどることを選択した場合、Passport は独自の認証戦略を実装するためのクリーンなインターフェースを提供します。関連する資格情報のリクエストを解析し、データベースでユーザーを検索するだけです。

API クライアントは異なります。特定のクライアントに関連付けられたアクセス トークンを簡単に認証する方法を提供する Passport の OAuth サポートを確認することをお勧めします。

于 2012-09-16T15:30:52.843 に答える
2

問題はパスポートではなく、curlコマンドはCookieを保存する必要があるため、ブラウザの動作を模倣するため-c-bパラメータを使用する必要があります。カールのマンページから:

curl -b cookies.txt -c cookies.txt www.example.com

このコマンドの機能は、Cookieをcookies.txtに保存し、cookies.txtから読み取るCookieを送信することです。これは、curlがnetscapecookie-jarファイル形式を模倣して書き込みおよび読み取りを行う方法です。

あなたの質問自体に関しては、Jaredはすでにそれに答えています!

于 2013-03-18T03:07:35.487 に答える