我正在使用AngularJS和Meteor,我在使用身份验证方面遇到麻烦,我使用帐户密码包来使用帐户包方法,但实现了我自己的UI。
至于现在我在我的ng.html(查看)文件中有这个:
<div ng-if="$auth.currentUser">I am visible only for logged in users!
<br>
{{ $auth.currentUser.emails }}
<form>
<input type = "submit" value = "Logout" ng-click = "logout();">
</form>
</div>
<div ng-if="!$auth.currentUser">
<input type="email" name="loginEmail" ng-model = "loginEmail">
<input type="password" name="loginPassword" ng-model = "loginPassword">
<input type = "submit" value = "Login" ng-click = "login(loginEmail,loginPassword);" >
</div>
因此,如果有用户登录,则$ auth.currentUser的值不为null且第一个div应该可见。
主要问题是我调用$ parent.login(...)来使用控制器进行身份验证,我在控制器上有这个:
$scope.login = function(loginEmail, loginPassword) {
//event.preventDefault();
Meteor.loginWithPassword(loginEmail, loginPassword);
//location.reload();
//$route.reload();
}
登录功能结束后,$ auth.currentUser变量不为空,没关系,现在我们应该看到另一个div,但是,ng-if不再检查值of $ auth.currentUser,直到发生某些事情,比如我按下按钮两次或使用我的一些网页功能,例如在过去时更改某些div的某些样式或属性。
所以我的问题是,有没有办法让ng-if在某个方法结束后再次检查值(因为这在Register和Logout方法中也会发生)或者变量已经更新了?
感谢您的时间和答案:)
答案 0 :(得分:0)
loginWithPassword
方法可以采用第三个参数;回调函数。 LoginWithPassword是一个异步方法,所以当服务器给我们回复(并且回调被触发)时,我们需要通知Angularjs发生了什么。在回调函数中调用$ scope。$ apply()。
答案 1 :(得分:0)
你可以使用这样的回调,
Meteor. loginWithPassword(loginEmail, loginPassword, function (err, result) {
if (err) {
// TODO: Log error
} else {
Meteor.logoutOtherClients(function () {
$state.go('your_state_name'); //something like $state.go('home');
});
}
$scope.$apply(function () {
//you can set any other $scope variables using $scope.$apply
$scope.isAuthenticating = false;
});
});