Passport.jsを使用してNodeで認証を処理する方法を学ぶ

元のソースから読んで私をサポートしてください:ORIGINAL SOURCE

この記事では、Passport.jsを使用してノードサーバーの認証を処理する方法を学習しますこの記事では、フロントエンド認証について説明していません。これを使用して、バックエンド認証を構成します(各ユーザーのトークンを生成してルートを保護します)。

ことを覚えておいてくださいあなたはどの段階で行き詰まった場合、あなたはこのGitHubのレポを参照することができます

この記事では、次のことをお教えします。

  • 保護されたルートの処理
  • JWTトークンの処理
  • 不正な応答の処理
  • 基本的なAPIの作成
  • モデルとスキーマの作成

前書き

Passport.jsとは何ですか?

Passportは、Node.jsの認証ミドルウェアです。Passportは非常に柔軟でモジュール式であるため、ExpressベースのWebアプリケーションに目立たないようにドロップできます。包括的な一連の戦略は、ユーザー名とパスワード、Facebook、Twitterなどを使用した認証をサポートします。パスポートの詳細については、こちらをご覧ください。

チュートリアル

ノードサーバーを最初から作成する

この「app.js」で新しいディレクトリを作成します内部のファイル:

開発を容易にするためにnodemonをインストールします。

次に、「app.js」を実行します。

$ nodemon app.js

ユーザーモデルの作成

「models」という新しいフォルダを作成し、そのフォルダ内に「Users.js」ファイルを作成します。ここで「UsersSchema」を定義します。受信した文字列を使用JWTCryptoて生成しhashsaltそこから取得しpasswordます。これは後でユーザーを検証するために使用されます。

新しく作成したモデルを「app.js」に追加しましょう。

構成後、「app.js」ファイルに次の行を追加しますMongoose

require('./models/Users');

パスポートを構成する

「passport.js」ファイルを含む新しいフォルダ「config」を作成します。

このファイルではvalidatePassword、で定義したメソッドを使用しますUser model。結果に基づいて、Passportのから異なる出力を返しLocalStrategyます。

「passport.js」を「app.js」ファイルに接続してみましょう。すべての下に次の行を追加しますmodels

require('./config/passport');

ルートと認証オプション

ファイル「auth.js」を含む「routes」という新しいフォルダーを作成します。

このファイルでは、関数を使用して、リクエストのヘッダークライアント側から送信されるJWTトークンgetTokenFromHeadersを取得します。また、プロパティを使用してオブジェクトを作成します。これらは後でルートで使用します。authoptionalrequired

同じ「routes」フォルダに「index.js」ファイルを作成します。

ここで、「routes」フォルダー内に「api」フォルダーが必要であり、その中に別の「index.js」ファイルがあります。

それでは、「api /index.js」に必要な「users.js」ファイルを作成しましょう。

まず、新しいモデルの作成(登録)に使用されるオプションの認証ルートを作成します‘/’

router.post('/', auth.optional, (req, res, next) ...

After that, we are going to create another optional auth route ‘/login’ . This will be used to activate our passport configuration and validate a received password with email.

router.post('/login', auth.optional, (req, res, next) ...

Lastly, we will create a required auth route, which will be used to return the currently logged in user. Only logged in users (users that have their token successfully sent through request’s headers) have access to this route.

router.get('/current', auth.required, (req, res, next) ...

Let’s add our “routes” folder to “app.js”.Add the following line below our passport require:

app.use(require('./routes'));

Route testing

I will be using Postmanto send requests to our server.

Our server accepts the following body:

{ "user": { "email": String, "password": String } }

Creating a POST request to create a user

Test body:

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

We will now use this token and add it to our “Headers” in Postman’s configuration.

And now let’s test our auth only route.

Creating a GET request to return the currently logged in user

Request URL:

GET //localhost:8000/api/users/current

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

Let’s try to do it without token in “Headers”.

Response:

The end

Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.

You can contact me through:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Check out my app SwipeFeed.