このチュートリアルでは、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つのビューを作成します。
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>
これで、登録ページは次のようになります。
ログインページは次のようになります:
そして、詳細ページは次のようになります:
ミドルウェアであるパスポートにより、リクエストと応答オブジェクトに応じて、特定のプロパティとメソッドを追加できます。 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 サイトの他の関連記事を参照してください。