passport.authenticate()不是单独路由中的函数
passport.authenticate() is not a function in separate routes
我已经完成并查看了不少Passport JS的示例。遗憾的是,他们都不像我。当我在server.js
文件中使用passport时,它可以按预期工作,就像我复制的代码中一样。
但我无法获得passport.authenticate()在src/server/login/routes.js
中工作
我也没能让它作为POST工作,它只能作为get工作,我不知道为什么。
server.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var expressSession = require('express-session');
var passport = require('passport');
var passportLocal = require('passport-local');
var User = require('server/db/db').User;
var routes = require('server/routes');
var PORT = process.env.PORT || 3000;
app.use(bodyParser.json());
app.use(cookieParser());
app.use(expressSession({
secret: process.env.SESSION_SECRET || 'mySecret',
resave: true,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new passportLocal.Strategy(function(username, password, done) {
console.log('localStrat Username: ' + username + ' Password: ' + password);
User.findOne({username: username, password: password}, function(err, user) {
console.log('searched for user');
if(user) {
console.log('found');
console.log(user);
done(null, user);
} else {
console.log('none');
done(null, false, {message: 'Unable to login'});
}
});
// if(username === password) {
// done(null, {id: username, name: username});
// } else {
// done(null, false, {message: 'Unable to login'});
// }
}));
passport.serializeUser(function(user, done){
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, {id: id, name: id});
});
routes(app);
app.get('/', function(req, res) {
res.send(''
<!DOCTYPE html>'
<html>'
<head>'
<title>TCG Inventory Manager</title>'
<base href="/">'
</head>'
<body>'
<div ui-view></div>'
<script src="bundle.js"></script>'
</body>'
</htm>'
');
});
app.get('/login', passport.authenticate('local'), function(req, res) {
console.log('/login');
res.send(req.user);
});
src/config/config.js
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import uiBootstrap from 'angular-ui-bootstrap';
import todoFactory from 'factories/todo-factory';
import invManFactory from 'factories/invMan-factory';
import loginFactory from 'factories/login-factory';
import todosController from 'todos/todos';
import invController from 'invMan/invMan';
import loginController from 'login/login';
const app = angular.module('app', [uiRouter, todoFactory.name, invManFactory.name, loginFactory.name, uiBootstrap]);
app.config(($stateProvider, $urlRouterProvider, $locationProvider) => {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('todos', {
url: '/todo',
template: require('todos/todos.html'),
controller: todosController
})
.state('about', {
url: '/about',
template: require('about/about.html')
})
.state('invMan', {
url: '/invMan',
template: require('invMan/invMan.html'),
controller: invController,
resolve: { loginCheck: checkLogin }
})
.state('login', {
url: '/',
template: require('login/login.html'),
controller: loginController
})
$locationProvider.html5Mode(true);
});
var checkLogin = function($q, $timeout, $http, $location, $rootScope) {
console.log('checkLogin');
var deffered = $q.defer();
$http.get('/login/stuff/loggedIn').success(function(user) {
$rootScope.errorMessage = null;
// User is Authenticated
if(user !== '0') {
console.log('is authed');
$rootScope.currentUser = user;
deffered.resolve();
// User is not Authenticated
} else {
console.log('not authed');
$rootScope.errorMessage = 'You need to be log in.';
deffered.reject();
$location.url('/');
}
});
return deffered.promise;
};
export default app;
src/server/routes.js
var loginRoutes = require('server/login/routes');
var todosRoutes = require('server/todos/routes');
var invManRoutes = require('server/invMan/routes');
module.exports = function routes(app, passport) {
app.use('/todos', todosRoutes);
app.use('/invMan', invManRoutes);
app.use('/login/stuff', loginRoutes);
};
src/server/login/routes.js
var express = require('express');
var mongoose = require('mongoose');
var User = require('server/db/db').User;
var router = express.Router();
router.get('/', passport.authenticate('local'), function(req, res) {
console.log('login');
res.send(req.body);
});
router.get('/loggedIn', function(req, res) {
res.send(req.isAuthenticated() ? req.user : '0');
});
module.exports = router;
提前感谢您的帮助!
您可以在需要检查身份验证时传递此函数。
router.get('/', ensureAuthentication, function(req, res) {
console.log('login');
res.send(req.body);
});
function ensureAuthentication(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
//user is not logged in
}
}
相关文章:
- Angularjs:路由后如何调用控制器函数
- 通过express路由调用HTML中的Javascript函数
- angular-index.html只识别默认路由中定义的函数
- 无法使用快递和猫鼬进行路由,请继续获取"类型错误:req.params.user不是函数;
- 如何在路由更改后停止 setInterval 函数在角度指令上执行
- ES6类,传递函数作为参数来注册expressjs路由
- Express JS - 对路由和中间件使用匿名函数
- 节点.js解析路由的最小函数
- ExpressJS中同一路由函数的多个路径
- 在 Express JS 中从路由调用函数对象
- 使用语义 UI 选项卡启用的多个路由的文档就绪函数应该去哪里
- 参数 '
' 不是 Angular 路由中的函数 - NodeJs,异步函数在 api 路由返回后完成
- ASP.Net MVC Razor - Javascript 函数路由问题
- 如何在快递.js中让多条路线使用相同的路由函数
- 调用路由中的父控制器函数
- Ember&RSVP:如何解决路由中的嵌套关系's模型函数
- $routeProvider配置路由抛出'未捕获错误:[ng:areq]参数'fn'不是函数,得
- AngularJS函数在路由更改时被错误调用
- 节点路由函数不做任何事情