2016-12-16 9 views
0

私は最初のフルスタックMEANアプリケーションを構築していますが、古いチュートリアルに従っていましたが、新しいnpmパッケージを使用していました。私は現在ログイン/登録アプリを構築中です。私のプログラムは、ユーザーの登録には問題ありません。ユーザーが登録されていない場合はプログラムを保存し、既に登録されている場合はプログラムを拒否します。しかし、私がログインすると、それはログインしてログアウトボタンを追加する角度のビューを変更する必要がありますが、そうではないようです。Passport.jsでのログインがAngularで更新されない

自分のHTMLにhashbangを使用しましたが、コード内で別のものを変更する必要がありますか?

が、多分PassportJSとは何かです:

ここ角度アプリここ

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; 
     } 
    }); 
    }; 
}); 

のソースコードはUPDATE認証ルート

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; 

} 

のソースだのか?

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); 
}; 
}; 

すべてのヘルプまたは一般的なポインタが評価されます。ありがとうございました!

+0

これは角のようなものではないようです。クライアント側の問題は何ですか? – Phix

+0

私はhashbangを使用しています、それは多分でしょうか?上記のソースコードをいくつか更新しました。$ location.path( '/');を呼び出すと、私はリダイレクトされないようです。 – blueblood

+0

私はおそらくそれをhashbangを使用していますか? @Phixは、$ scope.registerと$ scope.loginの下にあるものは実行されないと思っています。 – blueblood

答えて

0

私がそこで唯一行ったことは、パスワードをハッシュして確認していたので、パスポートとは何の関係もないと思わないでください。

関連する問題