ホームページ > ウェブフロントエンド > jsチュートリアル > パスポートを使用したNode.jsアプリケーションを認証します

パスポートを使用したNode.jsアプリケーションを認証します

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-03-13 10:54:10
オリジナル
920 人が閲覧しました

このチュートリアルでは、node.jsアプリケーションをゼロから開発し、人気のある認証ミドルウェアパスポートを使用して、認証の懸念を処理します。

Passportのドキュメントでは、「ノード用のシンプルで目立たない認証ミドルウェア」と説明しています。

Passportは、ミドルウェアとして自分自身を提供することで、Webアプリケーションの他の懸念を認証ニーズから分離するのに優れた仕事をします。ロギング、ボディパルシング、クッキーパルシング、セッション処理など、他のエクスプレスミドルウェアを構成するのと同じように、パスポートをエクスプレスベースのWebアプリケーションに簡単に構成できます。

このチュートリアルでは、node.jsの基本的な理解と、認証に焦点を合わせるためのExpressフレームワークを想定していますが、サンプルExpressアプリをゼロから作成しています。ルートを追加し、それらのルートの一部を認証することにより、アプリを保護します。

認証戦略

Passportは、500の認証メカニズムから選択できます。ローカルまたはリモートのデータベースインスタンスに対して認証するか、Facebook、Twitter、GoogleなどのOAuthプロバイダーを使用して単一のサインオンを使用して、ソーシャルメディアアカウントで認証できます。

ただし、心配しないでください。アプリケーションでは不要な戦略を含める必要はありません。これらの戦略はすべて互いに独立しており、パスポートのミドルウェア:NPMインストールExpressをインストールするときにデフォルトで含まれていない個別のノードモジュールとしてパッケージ化されています。

次のコードスニペットでExpress-Generatorをインストールすることもできます。

serializeUser function is used to persist a user's data into the session after successful authentication, while a passport , and create a file init.js with the following code snippets:

 var user = require( '../ models/user');<br><br> module.exports = function(passport){<br><br> //パスポートは、永続的なログインセッションをサポートするためにユーザーをシリアル化して脱代化できる必要があります<br> passport.serializeUser(function(user、done){<br> console.log( 'Serializing user:'、user);<br> done(null、user._id);<br> });<br><br> passport.deserializeUser(function(id、done){<br> user.findbyid(id、function(err、user){<br> console.log( 'Deserializing user:'、user);<br> done(err、user);<br> });<br> });<br> }<br>
ログイン後にコピー

パスポート戦略の使用

We will now define Passport's strategies for handling login and signup . Each of them would be an instance of the Local Authentication Strategy of Passport and would be created using the npm i connect-flash .

ログイン戦略

Create a login.js file in the bcryptjs by executing the command passport.use() function.

 var bcrypt = require( 'bcrypt-nodejs');<br><br> module.exports = function(passport){<br><br> passport.use( 'login'、...)<br> );<br><br> var isvalidpassword = function(user、password){<br> bcrypt.comparesync(password、user.password)を返します。<br> }<br> }<br>
ログイン後にコピー

コードスニペットに不安を感じていて、完全なコードの動作を見ることを好む場合は、ここでコードを閲覧してください。

登録戦略

Now, we create a signup.js file in the views folder of our application, we should see .jade files. Jadeはテンプレートエンジンで、主にnode.jsのサーバー側のテンプレートに使用されます。これは、Expressを使用してマークアップを作成し、動的にページをレンダリングする強力な方法です。静的HTMLファイルを使用するのに比べて、はるかに柔軟性が得られます。 Jadeとその仕組みの詳細については、ドキュメントをご覧ください。

次に、アプリケーションの次の4つのビューを作成します。

  1. layout.jade contains the basic layout and styling information.
  2. index.jade contains the login page providing the login form and giving the option to create a new account.
  3. register.jade contains the registration form.
  4. home.jade says hello and shows the logged-in user's details.
 Doctype HTML<br> HTML<br> 頭<br> タイトル=タイトル<br> link(rel = 'styleSheet'、href = '/styleSheets/style.css')<br> link(rel = 'styleSheet'、href = 'http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css')<br> 体<br> コンテンツをブロックします<br>
ログイン後にコピー

In the index.jade file, we will include the following code snippets:

レイアウトを拡張します<br><br>コンテンツをブロックします<br> div.container<br> div.row<br> div.col-sm-6.col-md-4.col-md-offset-4<br> h1.text-center.login-titleパスポートアプリにサインインします<br> Div.Account-Wall<br> img(class = 'profile-img'、src = 'https://lh5.googleusercontent.com/-b0-k99fzlye/aaaaaaaaaai/aaaaaaaaaaaa/eu7opa4byxi/photo.jpg?sz = 120')<br> form(class = 'form-signin'、action = '/login'、method = 'post')<br> input(type = 'text'、name = 'username' class = 'form-control'、placeholder = 'email'、必須、オートフォーカス)<br> 入力(type = 'password'、name = 'password' class = 'form-control'、placeholder = 'password'、必須)<br> button(class = 'btn btn-lg btn-primary btn-block'、type = 'submit')サインイン<br> span.clearfix<br> a(href = '/signup'、class = 'text-center new-account')アカウントを作成します<br> #メッセージ<br> メッセージの場合<br> h1.text-center.error-message#{message}<br>
ログイン後にコピー

In the register.jade file, we'll include the following code snippets:

レイアウトを拡張します<br><br>コンテンツをブロックします<br> div.container<br> div.row<br> div.col-sm-6.col-md-4.col-md-offset-4<br> h1.text-center.login-title登録の詳細<br> div.signup-wall<br> form(class = 'form-signin'、action = '/signup'、method = 'post')<br> input(type = 'text'、name = 'username'、class = 'form-control'、placeholder = 'username'、必須、オートフォーカス)<br> 入力(type = 'password'、name = 'password'、class = 'form-control nomargin'、placeholder = 'password'、必須)<br> 入力(type = 'email'、name = 'email'、class = 'form-control'、placeholder = 'email'、必須)<br> input(type = 'text'、name = 'firstName'、class = 'form-control'、placeholder = 'first name'、必須)<br> input(type = 'text'、name = 'lastName'、class = 'form-control'、placeholder = 'last name'、必須)<br> button(class = 'btn btn-lg btn-primary btn-block'、type = 'submit')レジスタ<br> span.clearfix<br> #メッセージ<br> メッセージの場合<br> h1.text-center.error-message#{message}<br>
ログイン後にコピー

In the home.jade file, we'll include the following code snippets:

レイアウトを拡張します<br><br>コンテンツをブロックします<br> div.container<br> div.row<br> div.col-sm-6.col-md-4.col-md-offset-4<br> #ユーザー<br> h1.text-center.login-title welcome#{user.firstname}。以下の詳細を確認してください。<br> div.signup-wall<br> UL.USER-Details<br> li username --->#{user.username}<br> liメール--->#{user.email}<br> li名--->#{user.firstname}<br> liの姓--->#{user.lastname}<br> a(href = '/signout'、class = 'text-center new-account')サインアウト<br>
ログイン後にコピー

これで、登録ページは次のようになります。

パスポートを使用したNode.jsアプリケーションを認証します

ログインページは次のようになります:

パスポートを使用したNode.jsアプリケーションを認証します

そして、詳細ページは次のようになります:

パスポートを使用したNode.jsアプリケーションを認証します

ログアウト機能の実装

ミドルウェアであるパスポートにより、リクエストと応答オブジェクトに応じて、特定のプロパティとメソッドを追加できます。 Passport has a very handy request.logout() method which invalidates the user session apart from other properties.

したがって、ログアウトルートを簡単に定義できます。

 / *ログアウトを処理 */<br> router.get( '/signout'、function(req、res、next){<br> req.logout(function(err){<br> if(err){return next(err); }<br> res.redirect( '/')<br> })<br> });<br>
ログイン後にコピー

ルートの保護

また、パスポートは、匿名のユーザーに適さないと思われるルートへのアクセスを保護する機能を提供します。これは、ユーザーがアプリケーションで認証せずにhttp:// localhost:3000/homeにアクセスしようとする場合、ホームページにリダイレクトされることを意味します。

 / *ホームページを取得 */<br> router.get( '/home'、isauthenticated、function(req、res){<br> Res.Render( 'Home'、{user:req.user});<br> });<br><br> //他のミドルウェアと同様に、next()を呼び出すことは典型的です<br>//ユーザーが認証されている場合<br>var isauthenticated = function(req、res、next){<br> if(req.isauthenticated())<br> next();<br> res.redirect( '/');<br> }<br>
ログイン後にコピー

結論

Node.jsアプリケーションの認証に関しては、この分野で唯一のプレーヤーではありませんが、モジュール性、柔軟性、コミュニティサポート、そしてそれが単なるミドルウェアであるという事実がパスポートを最大限に選択するという事実です。

PassportとEverauthの詳細な比較のために、Passport自身の開発者からの興味深い有益な視点を以下に示します。

GitHubリポジトリの例の完全なソースコードを見つけることができます。

node.jsで他に何ができるかを確認したい場合は、レスポンシブAJAX連絡フォームからURLショートナー、またはデータベースCRUDジェネレーターまで、Envato Marketのnode.jsアイテムの範囲をチェックしてください。

この投稿は、メアリー・オコスンからの貢献により更新されました。メアリーは、ナイジェリアのラゴスに拠点を置くソフトウェア開発者であり、node.js、JavaScript、MySQL、およびNOSQLテクノロジーの専門知識を持っています。

以上がパスポートを使用したNode.jsアプリケーションを認証しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート