[英]Can't get data from template and pass it to controller Angularjs
我正在嘗試進行用戶身份驗證,但是我認為模板中出現了問題。 當我與郵遞員嘗試時,它可以工作。 首先,我對/ users / authenticate進行API調用並獲得令牌。 然后,在獲得令牌后,我再次對/ users / me進行API調用以進行驗證。 成功,用戶登錄。
這是我的控制器:
.controller('homeCtrl', ['$rootScope', '$location', '$http', '$timeout', 'Auth', function ($rootScope, $location, $http, $timeout, Auth) {
$rootScope.loadme = false;
$rootScope.currentPa = $location.path();
$rootScope.$on('$routeChangeStart', function () {
if (Auth.isLoggedIn()) {
console.log('Success: User is logged in');
$rootScope.isLoggedIn = true;
Auth.getUser()
.then(function (data) {
$rootScope.username = data.data.username;
$rootScope.email = data.data.email;
$rootScope.loadme = true;
});
} else {
$rootScope.isLoggedIn = false;
$rootScope.username = '';
$rootScope.loadme = true;
}
});
$rootScope.doLogin = function (loginData) {
$rootScope.loading = true;
$rootScope.errorMsg = false;
console.log("TEST LOGIN");
Auth.doLogin($scope.loginData)
.then(function (data) {
console.log('logging in');
if (data.data.success) {
console.log('fgsgsg');
$rootScope.loading = false;
$rootScope.successMsg = data.data.message + 'Redirecting...';
$timeout(function () {
console.log('12345');
$location.path('/#!/');
$rootScope.loginData = '';
$rootScope.successMsg = false;
}, 2000);
} else {
console.log("no success");
$rootScope.loading = false;
$rootScope.errorMsg = data.data.message;
}
})
};
這些是服務器路由和中間件:
//User Login Route
router.post('/authenticate', function (req, res) {
User.findOne({username: req.body.username})
.select('username email password')
.exec(function (err, user) {
if (err) {
throw err;
}
if (!user) {
res.json({success: false, message: 'Could not authenticate
user'});
} else if (user) {
if (req.body.password) {
var validPassword =
user.comparePassword(req.body.password);
}
else {
res.status(200).json({success: false, message: 'Please
provide password'})
}
if (!validPassword) {
res.status(200).json({success: false, message: 'Could
not authenticate password'});
} else {
var token = jwt.sign({username: user.username, email:
user.email}, secret, {expiresIn: '24h'});
res.status(200).json({success: true, message: 'User
authenticated', token: token});
}
}
console.log(user);
});
});
//Middleware for decoding tokens
router.use(function (req, res, next) {
var token = req.body.token || req.body.query || req.headers['x-access-
token'];
if (token) {
jwt.verify(token, secret, function (err, decoded) {
if (err) {
res.json({success: false, message: 'Token Invalid'})
} else {
req.decoded = decoded;
next();
}
});
} else {
res.json({success: false, message: 'No token provided'});
}
});
router.post('/me', function (req, res) {
res.send(req.decoded);
});
最后,這是模板:
<div ng-controller="homeCtrl"> <form ng-submit="doLogin(loginData)"> <label>Username:</label> <input class="form-control" type="text" name="username" placeholder="please enter username" ng-model="loginData.username"> <br> <label>Email:</label> <input class="form-control" type="text" name="email" placeholder="please enter email" ng-model="loginData.email"> <br> <label>Password:</label> <input class="form-control" type="password" name="password" placeholder="please enter password" ng-model="loginData.password"> <br> <button class="btn btn-primary" type="submit" formmethod="post">Login</button> </form>
您無需在dologin函數中傳遞loginData。 只需添加語句$ scope.loginData = {};。 到控制器,並在調用doLogin()時嘗試將其打印出來,以查看數據是否已登錄到控制台。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.