通过护照登记。authentication

我正在开发一个网站,前面有nodejs / express / sequelize / mysql和angularJs

我的树结构在这里:

树结构

其实我从“RegisteredController.js”发布数据:

'use strict'; angular.module('appFoodtastic.registered', ['ngRoute']) // Routing configuration for this module .config(['$routeProvider', function ($routeprovider) { $routeprovider.when('/registered', { controller: 'RegisteredController', templateUrl: 'components/views/registeredView.html' }); }]) // Controller definition for this module .controller('RegisteredController', ['$scope','$http', function ($scope, $http) { init(); function init(){ }; $scope.submit = function () { console.log($scope.user); $http.post('/registered', $scope.user) .then(function (response) { console.log("posted") }).catch(function (response) { console.error(response) }) } }]); 

到我的“routes.js”文件中:

 module.exports = function (app, passport) { app.get('/login', function (req, res) { res.redirect("/#/login"); }); app.post('/registered', passport.authenticate('local-registered',{ successRedirect: '/', failureRedirect: '/#/registered' } )); // app.get('/', isLoggedIn, function (req, res) { // res.redirect("/#/registered") // }); app.post('/login', passport.authenticate('local-login', { successRedirect: '/', failureRedirect: '/#/login' } )); function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/#/login'); } } 

Passport.js包含我的散列用户密码和sequelize方法来添加新的用户,检查是否存在数据库:

 //load bcrypt var bCrypt = require('bcrypt-nodejs'); module.exports = function (passport, user) { var User = user; var LocalStrategy = require('passport-local').Strategy; passport.serializeUser(function (user, done) { done(null, user.id); }); // used to deserialize the user passport.deserializeUser(function (id, done) { User.findById(id).then(function (user) { if (user) { done(null, user.get()); } else { done(user.errors, null); } }); }); passport.use('local-registered', new LocalStrategy( { usernameField: 'email', passwordField: 'password', passReqToCallback: true // allows us to pass back the entire request to the callback }, function (req, email, password, done) { var generateHash = function (password) { return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null); }; User.findOne({ where: { email: email } }).then(function (user) { if (user) { return done(null, false, { message: 'That email is already taken' }); } else { var userPassword = generateHash(password); var data = { email: email, password: userPassword, firstname: req.body.firstname, lastname: req.body.lastname }; User.create(data).then(function (newUser, created) { if (!newUser) { return done(null, false); } if (newUser) { return done(null, newUser); } }); } }); } )); //LOCAL SIGNIN passport.use('local-login', new LocalStrategy( { // by default, local strategy uses username and password, we will override with email usernameField: 'email', passwordField: 'password', passReqToCallback: true // allows us to pass back the entire request to the callback }, function (req, email, password, done) { var User = user; var isValidPassword = function (userpass, password) { return bCrypt.compareSync(password, userpass); } User.findOne({ where: { email: email } }).then(function (user) { if (!user) { return done(null, false, { message: 'Email does not exist' }); } if (!isValidPassword(user.password, password)) { return done(null, false, { message: 'Incorrect password.' }); } var userinfo = user.get(); return done(null, userinfo); }).catch(function (err) { console.log("Error:", err); return done(null, false, { message: 'Something went wrong with your Signin' }); }); } )); } 

模型和路由需求被加载到server.js中:

 var routes = require('./app/routes/routes.js')(app, passport); //load passport strategies require('./app/config/passport/passport.js')(passport, models.user); 

我有一个问题whith passport.authenticate当我张贴数据不redirect到意见。 用户被创build,但我不能redirect的successRedirect和failureRedirect。

有什么想法吗?

尝试使用此代码进行正确的redirect

 module.exports = function(app, passport) { // normal routes =============================================================== // show the home page (will also have our login links) app.get('/', function(req, res) { res.render('index.ejs'); }); // PROFILE SECTION ========================= app.get('/profile', isLoggedIn, function(req, res) { res.render('profile.ejs', { user : req.user }); }); // LOGOUT ============================== app.get('/logout', function(req, res) { req.logout(); res.redirect('/'); }); // ============================================================================= // AUTHENTICATE (FIRST LOGIN) ================================================== // ============================================================================= // locally -------------------------------- // LOGIN =============================== // show the login form app.get('/login', function(req, res) { res.render('login.ejs', { message: req.flash('loginMessage') }); }); // process the login form app.post('/login', passport.authenticate('local-login', { successRedirect : '/profile', // redirect to the secure profile section failureRedirect : '/login', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); // SIGNUP ================================= // show the signup form app.get('/signup', function(req, res) { res.render('signup.ejs', { message: req.flash('loginMessage') }); }); // process the signup form app.post('/signup', passport.authenticate('local-signup', { successRedirect : '/profile', // redirect to the secure profile section failureRedirect : '/signup', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); // route middleware to ensure user is logged in function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); } 

这里index.ejsprofile.ejslogin.ejssignup.ejs这些都是模板文件,只不过是静态文件。 如果你使用html文件,你可以使用html文件而不是ejs文件。 希望这可以帮助。

在我的客户端,我的html文件被加载到这里的“index.html”中:

  <!DOCTYPE html> <html lang="en" ng-app="appFoodtastic" class="no-js"> <head> <title>Foodtastic</title> <!-- for-mobile-apps --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="Foodtastic Market" /> <script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script> <!-- //for-mobile-apps --> <!-- main slider-banner --> <link href="resources/css/skdslider.css" rel="stylesheet"> <!-- //main slider-banner --> <link href="resources/css/bootstrap.css" rel="stylesheet" type="text/css" media="all" /> <link href="resources/css/style.css" rel="stylesheet" type="text/css" media="all" /> <!-- font-awesome icons --> <link href="resources/css/font-awesome.css" rel="stylesheet"> <!-- //font-awesome icons --> <!-- js --> <script src="resources/js/jquery-1.11.1.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!-- //js --> <link href='//fonts.googleapis.com/css?family=Raleway:400,100,100italic,200,200italic,300,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic' rel='stylesheet' type='text/css'> <link href='//fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic' rel='stylesheet' type='text/css'> <!-- start-smoth-scrolling --> <script type="text/javascript" src="resources/js/move-top.js"></script> <script type="text/javascript" src="resources/js/easing.js"></script> <script type="text/javascript"> jQuery(document).ready(function ($) { $(".scroll").click(function (event) { event.preventDefault(); $('html,body').animate({ scrollTop: $(this.hash).offset().top }, 1000); }); }); </script> <!-- start-smoth-scrolling --> </head> <body> <div ng-include="'components/views/shared/headerView.html'"></div> <div ng-view></div> <div ng-include="'components/views/shared/footerView.html'"></div> <!-- In production use: <script src="//ajax.googleapis.com/ajax/libs/angularjs/xxx/angular.min.js"></script> --> <script src="resources/bower/angular/angular.js"></script> <script src="resources/bower/angular-route/angular-route.min.js"></script> <script src="app.js"></script> <script src="components/controllers/AboutController.js"></script> <script src="components/controllers/HomeController.js"></script> <script src="components/controllers/LoginController.js"></script> <script src="components/controllers/RegisteredController.js"></script> <script src="components/controllers/ContactController.js"></script> <script src="components/controllers/ProductsController.js"></script> <script src="components/controllers/cartController.js"></script> <script src="components/controllers/singleProductController.js"></script> <script src="resources/js/bootstrap.min.js"></script> <script src="resources/js/minicart.min.js"></script> <script src="resources/js/skdslider.min.js"></script> <script> // Mini Cart paypal.minicart.render({ action: '#' }); if (~window.location.search.indexOf('reset=true')) { paypal.minicart.reset(); } </script> </body> </html> 

ng-view载入我目前的html页面,并在这个index.html文件中加载页眉,页脚,脚本,CSS等等。 与您的主张,页面加载,但没有CSS或脚本..