国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Node Hero】8. 使用 Passport.js 進(jìn)行 Node.js 身份驗(yàn)證

CoderStudy / 3240人閱讀

摘要:本文轉(zhuǎn)載自眾成翻譯譯者網(wǎng)絡(luò)埋伏紀(jì)事鏈接原文本教程中將學(xué)習(xí)如何使用和實(shí)現(xiàn)一個(gè)本地身份驗(yàn)證策略。我們將有一個(gè)用戶頁,一個(gè)備注頁,和一些與身份驗(yàn)證相關(guān)的功能。下一步下一章主要涉及應(yīng)用程序的單元測(cè)試。你會(huì)學(xué)習(xí)單元測(cè)試測(cè)試金字塔測(cè)試替代等概念。

本文轉(zhuǎn)載自:眾成翻譯
譯者:網(wǎng)絡(luò)埋伏紀(jì)事
鏈接:http://www.zcfy.cc/article/1755
原文:https://blog.risingstack.com/node-hero-node-js-authentication-passport-js/

本教程中將學(xué)習(xí)如何使用 Passport.js 和 Redis 實(shí)現(xiàn)一個(gè)本地 Node.js 身份驗(yàn)證策略。

要使用的技術(shù)

在一頭扎進(jìn)實(shí)際代碼之前,我們先看看本章中要用到的新技術(shù)。

Passport.js 是什么?

簡(jiǎn)單、 不花哨的 Node.js 身份驗(yàn)證 - passportjs.org

Passport 是一個(gè) Node.js 身份認(rèn)證中間件,我們將把它用于會(huì)話管理。

Redis 是什么?

Redis 是一個(gè)開源的(BSD 許可)、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)倉(cāng)庫(kù),被用作數(shù)據(jù)庫(kù)、緩存和消息代理中間件 - redis.io。

我們打算把用戶的會(huì)話信息存到 Redis 中,而不是在會(huì)話過程的內(nèi)存中。通過這種方式,我們的應(yīng)用程序會(huì)更容易擴(kuò)展一些。

演示應(yīng)用

出于演示目的,下面我們創(chuàng)建一個(gè)只做如下事情的應(yīng)用程序:

顯示一個(gè)登錄表單,

顯示兩個(gè)受保護(hù)頁面:

概述(profile)頁面,

secured notes

項(xiàng)目結(jié)構(gòu)

在前一章你已經(jīng)學(xué)習(xí)了如何組織 Node.js 項(xiàng)目的結(jié)構(gòu),所以下面我們就開始用所學(xué)的知識(shí)!

我們打算采用如下結(jié)構(gòu):

├── app
|   ├── authentication
|   ├── note
|   ├── user
|   ├── index.js
|   └── layout.hbs
├── config
|   └── index.js
├── index.js
└── package.json

正如你所見,我們會(huì)圍繞著功能來組織文件和目錄。我們將有一個(gè)用戶頁,一個(gè)備注頁,和一些與身份驗(yàn)證相關(guān)的功能。

完整的代碼下載在 https://github.com/RisingStack/nodehero-authentication。*

Node.js 身份驗(yàn)證流程

我們的目標(biāo)是實(shí)現(xiàn)如下的身份驗(yàn)證流程到我們的應(yīng)用程序中:

用戶輸入姓名和密碼

應(yīng)用程序檢查是否匹配

如果匹配,就發(fā)送一個(gè) Set-Cookie 響應(yīng)頭,用它來驗(yàn)證之后的頁面

當(dāng)用戶從同一域訪問頁面時(shí),之前設(shè)置的 cookie 會(huì)被添加到所有的請(qǐng)求中

用這個(gè) cookie 驗(yàn)證受限制的頁面

為設(shè)置像這樣的身份驗(yàn)證策略,請(qǐng)遵循如下三個(gè)步驟:

第一步:設(shè)置 Express

我們打算用 Express 作為服務(wù)器框架 - 可以通過閱讀我們的 Express 教程,來學(xué)習(xí)更多關(guān)于此主題的知識(shí)。

// file:app/index.js
const express = require("express")  
const passport = require("passport")  
const session = require("express-session")  
const RedisStore = require("connect-redis")(session)

const app = express()  
app.use(session({  
  store: new RedisStore({
    url: config.redisStore.url
  }),
  secret: config.redisStore.secret,
  resave: false,
  saveUninitialized: false
}))
app.use(passport.initialize())  
app.use(passport.session())  

在這里我們做了什么?

首先,我們 require 了所有會(huì)話管理所需的依賴。之后,我們從 express-session 模塊創(chuàng)建了一個(gè)新的實(shí)例,用它來存儲(chǔ)會(huì)話。

為后備存儲(chǔ),我們用了 Redis。但是,你可以使用任何其它數(shù)據(jù)庫(kù),比如 MySQL 或者 MongoDB。

第二步:設(shè)置 Node.js Passport

Passport 是使用插件的一個(gè)很好的示例庫(kù)。對(duì)于本教程,我們添加 passport-local 模塊,該模塊讓我們可以很容易集成使用用戶名和密碼的簡(jiǎn)單本地身份驗(yàn)證策略。

為簡(jiǎn)單起見,在本例中,我們沒有使用第二個(gè)后備存儲(chǔ),只用了一個(gè)內(nèi)存中的 user 實(shí)例。在真實(shí)應(yīng)用程序中,findUser 會(huì)在數(shù)據(jù)庫(kù)中查找一個(gè)用戶。

// file:app/authenticate/init.js
const passport = require("passport")  
const LocalStrategy = require("passport-local").Strategy

const user = {  
  username: "test-user",
  password: "test-password",
  id: 1
}

passport.use(new LocalStrategy(  
  function(username, password, done) {
    findUser(username, function (err, user) {
      if (err) {
        return done(err)
      }
      if (!user) {
        return done(null, false)
      }
      if (password !== user.password  ) {
        return done(null, false)
      }
      return done(null, user)
    })
  }
))

一旦 findUser 返回 user 對(duì)象,剩下的唯一的事情是比較提供的用戶以及真實(shí)密碼,看看是否匹配。

如果匹配,就讓用戶進(jìn)入(通過將用戶返回給 passport - return done(null, user));如果不匹配,就返回一個(gè)未授權(quán)錯(cuò)誤(通過什么都不返回給 passport - return done(null))。

第三步:添加受保護(hù)的端點(diǎn)

要添加受保護(hù)的端點(diǎn),就得利用 Express 所用的中間件模式。為此,先創(chuàng)建身份驗(yàn)證中間件:

// file:app/authentication/middleware.js
function authenticationMiddleware () {  
  return function (req, res, next) {
    if (req.isAuthenticated()) {
      return next()
    }
    res.redirect("/")
  }
}

這段代碼有一個(gè)作用,就是如果用戶被驗(yàn)證(有正確的 cookies),就調(diào)用下一個(gè)中間件;否則就重定向到用戶登錄頁面。

用這種方式與把新中間件添加到路由定義一樣簡(jiǎn)單。

// file:app/user/init.js
const passport = require("passport")

app.get("/profile", passport.authenticationMiddleware(), renderProfile)  
總結(jié)

在本教程中,你已經(jīng)學(xué)習(xí)了如何給應(yīng)用程序添加基礎(chǔ)的身份驗(yàn)證。之后,就可以用不同的身份驗(yàn)證策略擴(kuò)展它,比如 Facebook 或 Twitter。在 http://passportjs.org/ 上可以找到更多策略。

完整的示例代碼放在 GitHub 上,你可以看看這里:https://github.com/RisingStack/nodehero-authentication。

下一步

下一章主要涉及 Node.js 應(yīng)用程序的單元測(cè)試。你會(huì)學(xué)習(xí)單元測(cè)試、測(cè)試金字塔、測(cè)試替代等概念。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85168.html

相關(guān)文章

  • Node Hero】7. Node.js 項(xiàng)目結(jié)構(gòu)

    摘要:本教程會(huì)學(xué)習(xí)如何正確組織一個(gè)項(xiàng)目的結(jié)構(gòu),從而在應(yīng)用程序開始增長(zhǎng)時(shí)避免混亂。項(xiàng)目結(jié)構(gòu)的五個(gè)基本規(guī)則組織項(xiàng)目有不少可能的方式并且每種已知的方式都有其興衰。過去在,我們有機(jī)會(huì)創(chuàng)建各種規(guī)模的高效應(yīng)用程序,也獲得了大量關(guān)于項(xiàng)目結(jié)構(gòu)注意事項(xiàng)的見解。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1756原文:https://blog.rising...

    張紅新 評(píng)論0 收藏0
  • Node Hero】1. 開始使用 Node.js

    摘要:使用一個(gè)事件驅(qū)動(dòng)的非阻塞式的模型,讓它輕量而高效。也就是說提供了用編寫服務(wù)器的可能性,這種服務(wù)器具有令人難以置信的性能。正如官方聲明所說是一個(gè)使用與瀏覽器相同引擎的運(yùn)行時(shí)。這意味著有兩個(gè)發(fā)布版本穩(wěn)定版和試驗(yàn)版。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1748原文:https://blog.risingstack.com/nod...

    hqman 評(píng)論0 收藏0
  • Node.js+MongoDB對(duì)于RestfulApi中用戶token認(rèn)證實(shí)踐

    摘要:則是目前比較成熟的一套互聯(lián)網(wǎng)應(yīng)用程序的設(shè)計(jì)理論。則允許操作,不一樣,報(bào)錯(cuò)返回或者加入黑名單。再看下我們的數(shù)據(jù)庫(kù)中的用戶信息,值也被存入了進(jìn)來,便于我們之后進(jìn)行權(quán)限驗(yàn)證。訪問同時(shí)將我們的值在中以傳入正確獲得用戶名則表示我們?cè)L問請(qǐng)求通過了驗(yàn)證。 showImg(https://segmentfault.com/img/remote/1460000008629635?w=800&h=534)...

    robin 評(píng)論0 收藏0
  • Node.js+MongoDB對(duì)于RestfulApi中用戶token認(rèn)證實(shí)踐

    摘要:則是目前比較成熟的一套互聯(lián)網(wǎng)應(yīng)用程序的設(shè)計(jì)理論。則允許操作,不一樣,報(bào)錯(cuò)返回或者加入黑名單。再看下我們的數(shù)據(jù)庫(kù)中的用戶信息,值也被存入了進(jìn)來,便于我們之后進(jìn)行權(quán)限驗(yàn)證。訪問同時(shí)將我們的值在中以傳入正確獲得用戶名則表示我們?cè)L問請(qǐng)求通過了驗(yàn)證。 showImg(https://segmentfault.com/img/remote/1460000008629635?w=800&h=534)...

    klinson 評(píng)論0 收藏0
  • Node Hero】5. Node.js 數(shù)據(jù)庫(kù)教程

    摘要:是一種設(shè)計(jì)用于關(guān)系型數(shù)據(jù)庫(kù)的查詢語言。另一方面,數(shù)據(jù)庫(kù)在最近十年變得相當(dāng)流行。大多數(shù)數(shù)據(jù)庫(kù)都有驅(qū)動(dòng)程序可以用,它們?cè)谏弦灿袔?kù)。我們已經(jīng)完成了在中使用數(shù)據(jù)庫(kù)所必須知道的所有基礎(chǔ)知識(shí)。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-t...

    Hujiawei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<