我在angularjs中创建了一个工厂服务,其中包含一个身份验证服务。如果身份验证成功,则生成 Jmeter 板服务所需的令牌。我能够生成令牌,但不知道如何使用它。
创建一个工厂服务来获取令牌,以便根据需要注入控制器,这是一个好主意吗?
login.html:
<div ng-app="loginFormApp" ng-controller="loginFormCtrl">
<form method="post" action="" id="login_form" class="row">
<input type="text" placeholder="Login ID" ng-model="loginId" >
<input type="password" placeholder="Password" ng-model="password" >
<input type="button" class="btn btn-theme" ng-click="loginCall()" value="Login">
<input type="button" class="btn btn-theme" ng-click="loginCall()" value="Register Here">
</form>
</div>
我的控制器和工厂服务(authService.js):
var app = angular.module('loginFormApp', []);
app.controller('loginFormCtrl', function ($scope, AuthService) {
$scope.loginCall = function () {
var token= AuthService.authentication($scope.loginId, $scope.password);
alert(token);
};
});
app.factory('AuthService', function ($http) {
return {
authentication: function (UserName, Password) {
$http.post("http://103.19.89.152:8080/ccp-services/authenticate", {
'userName': UserName,
'password': Password
})
.then(function (response) {
window.location.href = "http://192.168.1.144:2000/angular/dashboard.html";
var getToken = response.data.httpHeaders.h5cAuthToken;
// alert(token);
},
// Error Handling
function (response) {
console.log(response.datas);
});
}
}
});
3条答案
按热度按时间ve7v8dk21#
这段代码不起作用,因为$http.post返回a promise。
首先,您应该返回$http.post方法,如下所示。
在
$http.post
之后的then
方法中,您应该返回令牌。并且控制器中的登录调用应该是
更新1:重用访问令牌
当然,您希望能够在身份验证调用之后的API调用中重用访问令牌。这可以通过执行以下操作来完成。您可以将令牌“缓存”在服务本身中,而不是将访问令牌返回给调用方法。
在 Jmeter 板控制器中,您可以使用以下命令检索令牌:
当然,您需要额外的代码来检查是否真的检索到了令牌(否则您将得到
undefined
)。x7rlezfr2#
$http.post异步调用,所以你必须使用回调来获取token变量,认证函数不会返回它。
q5lcpyga3#
使用下面的工厂。我在$http调用中添加了一个return。
});