Подтвердить что ты не робот

Перенаправление после входа пользователя в систему

Я новичок в 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
    }
  };

Большое спасибо Джону Линдквисту за видео, которое дошло до меня.

4b9b3361

Ответ 1

Во-первых, вы не хотите перенаправлять пользователя на страницу входа.

Идеальный поток в одностраничном веб-приложении выглядит следующим образом:

  • Пользователь посещает веб-сайт. Веб-сайт отвечает статическими активами для angular на конкретном маршруте (например,/profile/edit).

  • Контроллер (для данного маршрута) выполняет вызов API с использованием $http, $route или другого механизма (например, чтобы предварительно заполнить форму Изменить профиль с помощью сведений из зарегистрированной учетной записи пользователя через GET to/api/v1/users/profile)

  • Если/если клиент получает 401 из API, покажите модальный логин и повторный вызов API.

  • Вызов API успешно (в этом случае пользователь может просмотреть предварительно заполненную форму профиля профиля для своей учетной записи.)

Как вы можете делать # 3? Ответ: $http Response Interceptors.

В целях глобальной обработки ошибок, аутентификации или любого вида синхронная или асинхронная предварительная обработка полученных ответов, это желательно иметь возможность перехватывать ответы для HTTP-запросов до они передаются в код приложения, который инициировал эти Запросы. ответные перехватчики используют обещание 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

Удачи и счастливы Угловая!