此文檔寫法爲測試寫法,不表明發布版本。
因爲我並不知道用passportjs與本身實現一個接口傳入token進行校驗相比有什麼優點,或者說就是想要知道passportjs到底作了些什麼事情,故有了這篇文章。node
首先發現一個小技巧:package.json 文件中的設置main字段能夠轉移require此項目時的根目錄。
libnpm
middlewarejson
session.jssession
因爲使用概論中的使用技巧,因此require此庫時,會直接引用lib/index.js函數
實例 = new 類(),此過程稱爲實例化。let a = '123';!!a === true,此處注意!!的用法。
let Instance = new require('lib/authenticator.js')(); /** 類lib/authenticator.js主要內容爲:見① **/ Instance.Passport = Instance.Authenticator = require('lib/authenticator.js'); Instance.Strategy = require('passport-strategy'); Instance.strategies = { SessionStrategy: require('lib/strategies/session') };
lib測試
framework ③ui
connect.js ③① 回:②⑩②this
導出 __monkeypatchNode函數prototype
爲http.IncomingMessage.prototype(稱爲IMP)對象(http爲node原生模塊)添加屬性,以下:code
IMP.login = IMP.logIn = ④①①; IMP.logout = IMP.logOut = ④①②; IMP.isAuthenticated = ④①③; IMP.isUnauthenticated = ④①④;
http ④
request.js ④① 回: ③①
login/logIn() ④①①
若是options.session:
調用this._passport.instance.serializeUser(user, this, 回調函數(err, obj):
this._passport.session.user = obj; this.session[this._passport.instance._key] = obj; done()
logout/logOut() ④①②
isAuthenticated() ④①③
isUnauthenticated() ④①④
middleware
session.js
strategies ⑤
session.js ⑤①
方法
authenticate
若是存在req._passport.session.user或者其等於0:
req._passport.instance.deserializeUser(req._passport.session.user, req, 回調:
authenticator.js ②
屬性
方法
framework(fw) ②⑩①
init ②⑩②
use ②⑩③ 回 ②⑩②
[To be continued]