此文档写法为测试写法,不表明发布版本。
因为我并不知道用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]