passport身份验证

news/2024/11/22 22:15:16/

创建文件authoriry.js

module.exports = {/*** 登陆权限验证*/isAuthenticated: function (req, res, next) {if(req.isAuthenticated()) {console.log('权限验证通过')return next();//继续访问}else{console.log('请先登陆')res.redirect('/bookshelf/login')//页面跳转}}
};

 

创建文件pasport.js

// 数据库连接配置
let config = {client: 'pg',        // 其他可以是pg、sqlite3connection: {host: 'localhost',user: 'postgres',password: 'root',database: 'tutorial', // 数据库名称charset: 'utf8'}
}let knex = require('knex'), db;    // 数据库连接// 保证数据库连接只初始化一次。if (!db) {console.log('建立连接')db = knex(config);
}let bodyParser  = require('body-parser')
let jsonParser = bodyParser.json();
let express     = require('express')
let router = express.Router();var app = express();
app.use('/pass', router);
app.listen(4000, function(){console.log('express 正在运行 http://localhost:4000');
});/*** ********************passport中间件*********************/
var  session     = require('express-session');
var  passport = require('passport');
var authority = require('E:/untitled/bin/bookshelf/连接数据库/authority.js')
var cookieParser = require('cookie-parser');
var LocalStrategy = require('passport-local').Strategy;
router.use(cookieParser());                      //增加cookie功能
router.use(session({                   //增加session功能,配置sessionsecret: 'keyboard cat',proxy: true,resave: true,saveUninitialized: true
}));
router.use(passport.initialize());              //实例化passport
router.use(passport.session());                 //增加session功能router.use(jsonParser)                          //给所有路由添加json解析功能
router.use('/xxx',authority.isAuthenticated)      //给url'/pass'下所有增加登陆验证/*** 登陆验证*/
router.route('/login').post(function (req,res,next) {console.log('进入/login方法')passport.authenticate('local', function (err,user,info) {if(err!=null){console.log('报错信息:'+err)}if (user){console.log(user)// res.redirect('/bookshelf') //执行页面跳转}else{res.send('登陆失败')}req.logIn(user, function(err) {// console.log('错误信息:'+err)if (err) { return next(err); }return res.redirect('/users'+user[0].id);//跳转页面});})(req, res, next);
});router.route('/xxx/test').post(function (req,res) {console.log("测试失败")
})/*** 使用passport本地策略* 此处定义POST请求体中需要用于登陆的字段,username和password*/
passport.use('local',new LocalStrategy({usernameField: 'name',passwordField: 'pass'},function (username,password,done) {console.log('登陆账号:'+username+'密码:'+password)db('users').select().where({name:username}).then(function (user) {console.log('开始验证')if(user.length===0){console.log('未找到登陆账号');return done(null,false)}
console.log(password)
console.log(user[0].password)if (user[0].password!=password) {console.log('密码错误'); return done(null, false); }return done(null, user);})}
))/**序列化后可保存user对象**/
passport.serializeUser(function (user, done) {console.log('执行序列化')if (user !== false){console.log(user[0].id)done(null, user[0].id);}});
/**反序列化用于会话之外的使用**/
passport.deserializeUser(function (id, done) {console.log('执行反序列化')console.log(id)done(null, id);
});

http://www.ppmy.cn/news/618766.html

相关文章

Passport-Configure

Configure 使用Passport实现认证需要配置三方面: 认证策略Application middlewareSessions (optional) Strategies Passport uses what are termed strategies to authenticate requests. 策略的范围包括username和password,授权认证使用 OAuth&#xf…

Passport 你的网站(在你的WebSite上实现MS Passport )上

Passport 你的网站 (上) -------(在你的WebSite上实现MS Passport ) 小气的神 2001-11-12 Article Type: In-Depth 难度等级:4/9 版本:1.01 Passport 最早出现在1999年,当时只是为满足MS收购Ho…

Laravel Passport认证-多表、多字段解决方案

1. 概述 API 通常使用令牌(token)进行认证并且在请求之间不维护会话(Session)状态。Laravel 官方扩展包 Laravel Passport 让 API 认证变得轻而易举,Passport 基于 Alex Bilbie 维护的 League OAuth2 server&#xff…

Nodejs利用passport验证用户登录

passport验证用户登录 最近学习用nodejsexpresssession实现用户登录,绕不开使用passport,系统记录一下学习和实践过程 1. Passport简介 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express、Sails…

jsd2205-csmall-passport(Day13)

1. 解析JWT时可能出现的错误 如果使用过期的JWT,在解析时将出现错误: io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-09-06T17:33:03Z. Current time: 2022-09-08T09:04:26Z, a difference of 142283930 milliseconds. Allowed clock sk…

Portal认证

Portal认证通常又称Web认证,用户上网时,必须在Portal认证页面进行认证,如果未认证成功,仅可以访问特定的网络资源,认证成功后,才可以访问其他网络资源。 Portal认证具有以下优点: 简单方便&…

Laravel Passport身份认证写法

在laravel中, 可以用Passport扩展来实现Oauth2.0的接口身份验证。 可以让用户在第三方客户端登录账号。 但是大多数时候只需要用户直接在我们的客户端上登录即可, 这时候需要适合用Passport里面的Personal Access Tokens方式来实现。 下面记录下安装和使…

Passport 授权码模式

交流群 375462817 授权码模式 哔哩哔哩提供一个“微信登陆”的链接,用户点击跳转到微信授权服务器。用户根据微信授权服务器提示登陆微信并确认授权给哔哩哔哩。微信授权服务器返回用户代理(浏览器)一个授权码。用户代理(浏览器…