1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const passport = require('passport');
- const LocalStrategy = require('passport-local').Strategy;
- const Strategy = require('passport-http-bearer').Strategy;
- var jwt = require("jsonwebtoken");
- var _ = require('lodash');
- var jwt_config = require("config").get("jwt_config");
- // 通过登录函数初始化
- /**
- * 初始化 passport 框架
- *
- * @param {[type]} app 全局应用程序
- * @param {[type]} loginFunc 登录函数
- * @param {Function} callback 回调函数
- */
- module.exports.setup = function(app,loginFunc,callback) {
- // 用户名密码 登录策略
- passport.use(new LocalStrategy(
- function(username, password, done) {
- if(!loginFunc) return done("登录验证函数未设置");
- loginFunc(username,password,function(err,user) {
- if(err) return done(err);
- return done(null, user);
- });
- })
- );
- // token 验证策略
- passport.use(new Strategy(
- function(token, done) {
- jwt.verify(token, jwt_config.get("secretKey"), function (err, decode) {
- if (err) { return done("验证错误"); }
- return done(null, decode);
- });
- }
- ));
- // 初始化passport模块
- app.use(passport.initialize());
- if(callback) callback();
- };
- /**
- * 登录验证逻辑
- *
- * @param {[type]} req 请求
- * @param {[type]} res 响应
- * @param {Function} next [description]
- */
- module.exports.login = function(req,res,next) {
- passport.authenticate('local', function(err, user, info) {
-
- if(err) return res.sendResult(null,400,err);
- if(!user) return res.sendResult(null,400,"参数错误");
- // 获取角色信息
- var token = jwt.sign({"uid":user.id,"rid":user.rid}, jwt_config.get("secretKey"), {"expiresIn": jwt_config.get("expiresIn")});
- user.token = "Bearer " + token;
- return res.sendResult(user,200,'登录成功');
- })(req, res, next);
-
- }
- /**
- * token验证函数
- *
- * @param {[type]} req 请求对象
- * @param {[type]} res 响应对象
- * @param {Function} next 传递事件函数
- */
- module.exports.tokenAuth = function(req,res,next) {
- passport.authenticate('bearer', { session: false },function(err,tokenData) {
- if(err) return res.sendResult(null,400,'无效token');
- if(!tokenData) return res.sendResult(null,400,'无效token');
- req.userInfo = {};
- req.userInfo.uid = tokenData["uid"];
- req.userInfo.rid = tokenData["rid"];
- next();
- })(req, res, next);
- }
|