合合肥网站建设,某qq非主流个性网源码qq空间网站源码dede内核+采集规则,wordpress主题国人,道滘东莞微信网站建设全面鉴权
这一节我们来介绍一下 Passport.js#xff0c;这是一个强大的 NodeJS 的认证中间件
Passport.js 提供了多种认证方式#xff0c;账号密码、OpenID、ApiKey、JWT、OAuth、三方登录等等。
使用 Passport.js 认证要配置三个部分#xff1a;
认证策略中间件会话
接…全面鉴权
这一节我们来介绍一下 Passport.js这是一个强大的 NodeJS 的认证中间件
Passport.js 提供了多种认证方式账号密码、OpenID、ApiKey、JWT、OAuth、三方登录等等。
使用 Passport.js 认证要配置三个部分
认证策略中间件会话
接下来我们以 账号密码 认证为例来演示一下 Passport.js 的使用
准备工作
新建一个基础的 evp-express 项目
安装依赖
安装 passport.js
npm install passport安装 local 策略
npm install passport-local创建页面
在 public 目录下面创建 index.html, fail.html, home.html 3个页面
index.html:
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/title
/head
bodyform action/login methodpostinput nameusername placeholderusername... /input namepassword placeholderpassword... /button typesubmitLogin/button/form
/body
/htmlfail.html
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleFail/title
/head
bodyh1Fail/h1a titlegologin href/viewsGo login/a
/body
/htmlhome.html
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleHome/title
/head
bodyh1Hello, Home!/h1
/body
/html设置静态目录
app.js:
const config require(./config.js).get();
//...
app.use(/views, express.static(config.public, { extensions: [html] }));这个 extensions 选项用于允许访问静态页面不带 html 后缀。
开启Session
app.js:
//...
app.use(session({secret: secret,resave: false,saveUninitialized: true
}));初始化passport
app.js:
const passport require(passport);//...
app.use(passport.initialize());
app.use(passport.session());设置认证
步骤
使用策略规定认证过程done是回调函数可以接收三个参数异常在会话中保存的用户信息填 false 代表认证失败其余数据比如传递信息序列化用户信息反序列化用户信息 app.js:
const LocalStrategy require(passport-local).Strategy;//...
passport.use(new LocalStrategy(function verify(username, password, done) {if (username root password root) {return done(null, { username, password});}return done(null, false, {message: None});}
))passport.serializeUser((user, cb) {process.nextTick((){cb(null, {username: user.username, password: user.password})})
})passport.deserializeUser((user, cb) {process.nextTick((){return cb(null, user);});
});编写登录接口
router/index.js:
const { Json, Form, Multi, FromPlus } require(../midwares/bodyParser);//...
router.post(/login, FromPlus, passport.authenticate(local, {failureRedirect: /views/fail,failureFlash: false
}), (req, res, next) {res.redirect(/views/home);
});前端页面在表单中填写登录信息先按照表单格式解析一下然后再加入 passport 的认证中间件指定策略为 local, 并指定认证失败跳转到 fail.html成功则重定向到 homte.html这个可以和失败重定向一样作为 successRedirect 选项写到上面。
保护接口
编写一个判断时候登录的中间件函数
function isLogined(req, res, next) {if (req.isAuthenticated()) {return next();}res.redirect(/views/);
}对 / 路由进行登录保护
router.get(/, isLogined, (req, res, next) {logger.info(Hello World!);res.json(Resp.ok(Hello World!, 1, null));
});测试
此时运行项目在浏览器中访问http://127.0.0.1:8080会被重定向到登录界面登录成功后在地址栏可以正常访问到这个被保护的路由登录失败则会被重定向到 fail 页面。
Passport.js 的更多用法请自行探索详见官方文档https://www.passportjs.org/docs/
下一节-软件测试