【问题标题】:AngularJS Forgot passwordAngularJS忘记密码
【发布时间】:2015-12-31 08:23:47
【问题描述】:

我有一个忘记密码的表单,当用户输入电子邮件时,它会点击后端并向用户发送电子邮件链接,如下所示。

用户点击链接,调用后端服务。如何通过angular 控制此网址?所以,基本上这调用了一个后端资源,但我希望这个 url 也可以在前端处理。

如果这个问题不是很清楚,谁能给我看一个在 AngularJS 和 NodJs 或任何后端实现忘记密码的例子。

【问题讨论】:

  • 你为什么不按以下方式更改链接:localhost:3000/#/resetpassword/55356236t663623 并通过 routeProvider 或 stateProvider 为这个提供路由
  • 你为什么不按以下方式更改链接:localhost:3000/#/resetpassword/55356236t663623 并在你的 angularjs 应用程序中使用 routeProvider 或 stateProvider 进行路由
  • 你应该有一个这样的“忘记密码”页面:https://example.com/forgotpw/?token=xxxxxxxxx,然后该页面应该为用户提供前端体验,获取新密码,并向您的后端脚本。

标签: javascript angularjs node.js


【解决方案1】:

如果您可以更改电子邮件中的链接,请按以下方式更改:

http://localhost:3000/#/resetpassword/<token>

现在在您的角度路线中,您需要按以下方式收听此路线:

angular.module('myApp', ['ngRoute'])

 .controller('ResetPasswordController', function($scope, $route, $routeParams, $location) {
     //password resetting functionality
 })
.config(function($routeProvider, $locationProvider) {
  $routeProvider
   .when('/resetpassword/:token', {
    templateUrl: 'reset.html',
    controller: 'ResetPasswordController',
    resolve: {
      // Call the backend service to check if the token is valid
      verifyToken: function($q, $route) {
        var deferred = $q.defer();
        $http({
          method: 'GET',
          url: '/reset/' + $route.current.params.token
        }).success(function (data) {
           deferred.resolve(data);
        }).error(function (msg) {
          deferred.reject(msg);
        });

        return deferred.promise;
      }
    }
  })
});

【讨论】:

  • 让这个失败,我得到一个 deferred.reject(msg),我可以在我的控制器中处理这个吗?
  • 角度路由的解析在路由哈希更改之前执行,并且可以使用相同的名称将它们作为服务传递给控制器​​。现在,如果一个 resolve 返回一个 Promise,那么 Angular 将等待 Promise 得到解决,然后它将继续流程。如果 promise 被拒绝,那么路由更改将不会发生。在您的情况下,如果您仍想从控制器执行某些功能,那么您需要使用适当的参数来解决承诺,而不是拒绝。
  • 这个答案对你有帮助吗?
猜你喜欢
  • 2012-07-25
  • 2012-12-20
  • 2013-05-17
  • 2011-08-26
  • 1970-01-01
  • 2016-02-14
  • 2012-07-15
  • 2012-02-09
  • 2011-08-22
相关资源
最近更新 更多