Хэш удален из маршрутизации по умолчанию в AngularJS

#angularjs #angularjs-routing

#angularjs #angularjs-маршрутизация

Вопрос:

Я пишу приложение angular, в котором мне нужно принять URL-адрес с хэшем фрагмента (OAuth 2.0). Сокращая его, он выглядит следующим образом.

http://example.com/#access_token=918f4d6e90b25b13ef66a

Когда этот URI загружается, процесс маршрутизации не распознает путь и корректно перенаправляет приложение на маршрут по умолчанию. Проблема в том, что таким образом я теряю хэш и больше не могу его анализировать.

Что я хочу сделать, так это проанализировать хэш до его удаления. У вас есть какие-либо идеи о возможном решении?

Спасибо.

P.S. В этом приложении я не могу использовать режим HTML5. С включенной функцией он работает просто отлично.

Комментарии:

1. Итак, что именно хотелось бы, чтобы произошло?

2. Я хотел бы иметь возможность анализировать хэш перед его потерей.

3. Очевидно 🙂 Но чего вы пытаетесь достичь на более высоком уровне? Как бы вы использовали этот проанализированный токен?

4. Я пытаюсь устранить ошибку в этом проекте [1]. Я хочу сохранить токен доступа в службе, чтобы я мог использовать его для выполнения некоторых запросов аутентификации. [1] lelylan.github.io/lelylan-ng

Ответ №1:

Вам просто нужно определить дополнительный маршрут для «перехвата» и сохранить токен доступа, прежде чем перенаправлять на другой маршрут.
Например.:

 $routeProvider
    ...
    .when('/access_token=:accessToken', {
        template: '',
        controller: function ($location, $routeParams, AuthService) {
            AuthService.login(               // `AuthService` will save the token
                $routeParams.accessToken);   // The token is available in `$routeParams
                                             //     under the key `accessToken`
            $location.path('/');   // Redirect to the default route
            $location.replace();   // For better UX, remove this route from history
        }
    })
  

Смотрите также эту короткую демонстрацию.

Или перейдите непосредственно к этому URL для демонстрации в реальном времени:
http://fiddle.jshell.net/ExpertSystem/N8CgC/show#access_token=12345.

Комментарии:

1. Собираюсь попробовать это завтра утром. Большое спасибо за ваш ответ.