用户登录后重定向

时间:2013-03-06 23:46:42

标签: redirect login angularjs angularjs-routing angularjs-authentication

我对Angular很新,现在我只是试图让我的所有路线都按照我的意愿设置和工作。

设置: 当用户导航到某些页面时(此示例为/settings),应用程序应检查是否有用户已登录。如果有照常继续。否则,用户应该转到登录页面(/login)。

我想要的是什么: 用户成功登录后,应该转到他们最初尝试访问的页面(/settings

我的问题: 是否有“Angular方式”来记住用户试图去的地方?

相关代码:

app.js

  .when('/settings', {
      templateUrl: '/views/auth/settings.html',
      controller: 'SettingsCtrl',
      resolve: {
        currentUser: function($q, $location, Auth) {
          var deferred = $q.defer();

          var noUser = function() {
            //remember where the user was trying to go
            $location.path("/login")
          };

          Auth.checkLogin(function() {
            if (Auth.currentUser()) {
              deferred.resolve(Auth.currentUser());
            } else {
              deferred.reject(noUser());
            }
          });

          return deferred.promise;
        }
      }
    })

login.js

  $scope.submit = function() {
    if(!$scope.logInForm.$invalid) {
      Auth.login($scope.login, $scope.password, $scope.remember_me)
      //go to the page the user was trying to get to
    }
  };

非常感谢约翰·林德奎斯特(John Lindquist)the video让我走到这一步。

1 个答案:

答案 0 :(得分:17)

首先,您不希望将用户重定向到登录页面。

单页面网络应用程序中的理想流程如下:

  1. 用户访问网站。该网站回复了静态资产 特定路线的角度应用程序(例如/ profile / edit)。

  2. 控制器(对于给定路线)使用$ http,$ route或其他机制调用API(例如,通过以下方式预先填写编辑配置文件表单,其中包含登录用户帐户的详细信息) GET到/ api / v1 / users / profile)

  3. 如果/当客户端从API收到401时,请显示模式 登录,并重播API调用。

  4. API调用成功(在这种情况下,用户可以查看其帐户的预填充编辑个人资料表单。)

  5. 你怎么能做#3?答案是$ http 响应拦截器

      

    出于全局错误处理,身份验证或任何类型的目的   接收响应的同步或异步预处理,它是   希望能够在之前拦截对http请求的响应   它们被移交给发起这些的应用程序代码   要求。 响应拦截器利用promise apis   满足同步和异步预处理的需要。

    http://docs.angularjs.org/api/ng.$http

    既然我们知道理想的用户体验应该是什么,我们该怎么做呢?

    这里有一个例子:http://witoldsz.github.com/angular-http-auth/

    该示例基于以下文章:

    http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application

    祝你好运,快乐的Angularing!

相关问题