2016-12-16 2 views
0

Ich baue meine erste Full-Stack-MEAN-Anwendung, aber ich folgte einem alten Tutorial, aber eine neuere npm-Pakete verwendet, so dass einige meiner Code nicht funktioniert. Ich baue gerade eine Login/App. Mein Programm ist gut in der Registrierung eines Benutzers, speichert es, wenn der Benutzer nicht registriert wurde, und leugnet es, wenn es bereits vorhanden ist. Aber wenn ich mich anmelde, sollte es die Winkelansicht ändern, um eingeloggt zu sein, und eine Abmelde-Schaltfläche hinzufügen, aber das scheint es nicht zu tun.Login auf Passport.js nicht auf Angular aktualisieren

Ich habe Hashbang auf meinem HTML verwendet, muss ich etwas anderes in meinem Code ändern?

Hier ist der Quellcode für die Winkel App

app.controller('authController', function($scope, $http, $rootScope, $location){ 
    $scope.user = {username: '', password: ''}; 
    $scope.error_message = ''; 

    $scope.login = function(){ 

    $http.post('/auth/login', $scope.user).then(function(data){ 
     if(data.state == 'success'){ 
     $rootScope.authenticated = true; 
     console.log('user is now authenticated'); // not printing 
     $rootScope.current_user = data.user.username; 
     console.log('user is now logged in'); 
     $location.path('/'); 
     console.log('view is updated'); 
     } 
     else{ 
     $scope.error_message = data.message; 
     } 
    }); 
    }; 

    $scope.register = function(){ 
    $http.post('/auth/signup', $scope.user).then(function(data){ 
     if(data.state == 'success'){ 
     $rootScope.authenticated = true; 
     console.log('user is now authenticated'); //this is not printing 
     $rootScope.current_user = data.user.username; //accessing mongodb 
     console.log('user is now logged in'); 
     $location.path('/'); 
     console.log('view is updated'); 
     } 
     else{ 
     $scope.error_message = data.message; 
     } 
    }); 
    }; 
}); 

Hier ist die Quelle für die Authentifizierung Route

var express = require('express'); 
var router = express.Router(); 
var bodyParser = require('body-parser'); 


module.exports = function(passport){ 

    //sends successful login state back to angular 
    router.get('/success', function(req, res){ 
     res.send({state: 'success', user: req.body.user ? req.body.user : null}); 
     console.log('successfully login'); 
    }); 

    //sends failure login state back to angular 
    router.get('/failure', function(req, res){ 
     res.send({state: 'failure', user: null, message: "Invalid username or password"}); 
     console.log('username/password does not exist in database'); 
}); 

    //log in 
    router.post('/login', passport.authenticate('login', { 
     successRedirect: '/auth/success', 
     failureRedirect: '/auth/failure' 
    })); 

    //sign up 
    router.post('/signup', passport.authenticate('signup', { 
     successRedirect: '/auth/success', 
     failureRedirect: '/auth/failure' 
    })); 

    //log out 
    router.get('/signout', function(req, res) { 
     req.logout(); 
     res.redirect('/'); 
    }); 

    return router; 

} 

UPDATE:

Ist es vielleicht etwas mit PassportJS zu tun?

var mongoose = require('mongoose'); 
var User = mongoose.model('User'); 
var LocalStrategy = require('passport-local').Strategy; 
var bCrypt = require('bcrypt-nodejs'); 
module.exports = function(passport){ 

// Passport needs to be able to serialize and deserialize users to support persistent login sessions 
passport.serializeUser(function(user, done) { 
    console.log('serializing user:',user.username); 
    done(null, user._id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     console.log('deserializing user:',user.username); 
     done(err, user); 
    }); 
}); 

passport.use('login', new LocalStrategy({ 
     passReqToCallback : true 
    }, 
    function(req, username, password, done) { 
     // check in mongo if a user with username exists or not 
     User.findOne({ 'username' : username }, 
      function(err, user) { 
       // In case of any error, return using the done method 
       if (err) 
        return done(err); 
       // Username does not exist, log the error and redirect back 
       if (!user){ 
        console.log('User Not Found with username '+username); 
        return done(null, false);     
       } 
       // User exists but wrong password, log the error 
       if (!isValidPassword(user, password)){ 
        console.log('Invalid Password'); 
        return done(null, false); // redirect back to login page 
       } 
       // User and password both match, return user from done method 
       // which will be treated like success 
       return done(null, user); 
      } 
     ); 
    } 
)); 

passport.use('signup', new LocalStrategy({ 
     passReqToCallback : true // allows us to pass back the entire request to the callback 
    }, 
    function(req, username, password, done) { 

     // find a user in mongo with provided username 
     User.findOne({ 'username' : username }, function(err, user) { 
      // In case of any error, return using the done method 
      if (err){ 
       console.log('Error in SignUp: '+err); 
       return done(err); 
      } 
      // already exists 
      if (user) { 
       console.log('User already exists with username: '+username); 
       return done(null, false); 
      } else { 
       // if there is no user, create the user 
       var newUser = new User(); 

       // set the user's local credentials 
       newUser.username = username; 
       newUser.password = createHash(password); 

       // save the user 
       newUser.save(function(err) { 
        if (err){ 
         console.log('Error in Saving user: '+err); 
         throw err; 
        } 
        console.log(newUser.username + ' Registration succesful');  
        return done(null, newUser); 
       }); 
      } 
     }); 
    }) 
); 

var isValidPassword = function(user, password){ 
    return bCrypt.compareSync(password, user.password); 
}; 
// Generates hash using bCrypt 
var createHash = function(password){ 
    return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); 
}; 
}; 

Jede Hilfe oder allgemeiner Zeiger wird geschätzt. Vielen Dank!

+0

Scheint nicht, als ob dies mit Winkel verbunden ist. Was ist das Problem Client-Seite? – Phix

+0

Ich benutze Hashbang, vielleicht war es das? Ich habe einen Teil des obigen Quellcodes aktualisiert, es scheint, dass er mich nicht umleitet, wenn ich $ location.path ('/') anrufe; – blueblood

+0

Ich benutze Hashbang vielleicht das ist es? @Phix denke nicht, dass die Sachen, die ich unter $ scope.register und $ scope.login habe, ausgeführt werden. – blueblood

Antwort

0

Hmmm, glaube nicht, dass es irgendwas mit dem passJS zu tun hat, da das einzige, was ich gemacht habe, Hashing und Passwortkontrolle war.

Verwandte Themen