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);
};
};
すべてのヘルプまたは一般的なポインタが評価されます。ありがとうございました!
これは角のようなものではないようです。クライアント側の問題は何ですか? – Phix
私はhashbangを使用しています、それは多分でしょうか?上記のソースコードをいくつか更新しました。$ location.path( '/');を呼び出すと、私はリダイレクトされないようです。 – blueblood
私はおそらくそれをhashbangを使用していますか? @Phixは、$ scope.registerと$ scope.loginの下にあるものは実行されないと思っています。 – blueblood