我正在尝试从重置pw电子邮件中的链接中检索重置pw令牌。该链接使用我想要获取的令牌将用户发送回我的node / angular应用程序。
Laravel API:电子邮件模板
<td class="content">
<a href="http://localhost:3000/reset-password?token={{$token}}">Reset Your Password</a>
</td>
节点/角度应用:ResetPassword.ejs模板:我使用的是角度控制器:
<div ng-controller="resetPasswordCtrl">
...stuff
</div>
重置密码控制器:
'use strict';
angular
.module('myApp')
.controller('resetPasswordCtrl', ['$scope', '$routeParams', '$location', function($scope, $routeParams, $location) {
console.log('ROUTE PARAMS', $routeParams); //object with a bunch of getters/setters
console.log('ROUTE PARAMS', $routeParams.token); //undefined
console.log('Location', $location.search('token')); //LocationHashbangUrl
console.log('Location', $location.search().token); //true
console.log('Location', $location.search()['token']); //true
console.log('Route current params', $route); //empty route object
}]);
对于LocationHashbangUrl($location.search('token')
),我知道我正在使用令牌获取正确的URL,因为$$ absUrl显示了它。
为什么我无法使用控制器中显示的其中一种方法检索token
参数?
答案 0 :(得分:0)
你可以发布你的$ routeProvider吗?您可以在其中添加令牌作为参数,然后$ routeParams.token将执行您想要的操作。像这样:
$routeProvider.when('/reset-password/:token')
这意味着你的重置密码网址看起来像这样:
http://localhost:3000/reset-password/{{$token}}
答案 1 :(得分:0)
原来不使用html5 / angular routing,典型的方法
$location.search()
$routeParams
无效。
由于我传递params并从外部访问我的节点应用程序(从laravel分发的电子邮件链接),我需要使用javascript解析URI。
我发现this resource让事情变得简单。因此,以下工作:
'use strict';
angular
.module('myApp')
.controller('resetPasswordCtrl', ['$scope', '$window', function($scope, $route, $window) {
var getURIParams = function(variable) {
var query = $window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
console.log('Query variable %s not found', variable);
};
console.log('VAR', getURIParams('token')); //my token param
}]);