AngularJS читает параметры из URL с хешем

Я использую шаблон ASP.NET SPA, но переделываю его для работы с AngularJS вместо KnockoutJS. У меня проблема с маркером доступа авторизации. По умолчанию в этом шаблоне маркер доступа авторизации извлекается путем перенаправления пользователя на /Account/Authorize?client_id=web&response_type=tokenпосле этого пользователь перенаправляется на дом с /#access_token=TOKEN_HERE&token_type=bearer&expires_in=1209600 в качестве аргумента. В шаблоне КО есть такая common объект с функцией getFragment который читает этот аргумент URL и возвращает этот токен доступа. В шаблоне есть этот код, который выполняется каждый раз при перезагрузке страницы

        if (!dataModel.getAccessToken()) {
            // The following code looks for a fragment in the URL to get the access token which will be
            // used to call the protected Web API resource
            var fragment = common.getFragment();

            if (fragment.access_token) {
                // returning with access token, restore old hash, or at least hide token
                window.location.hash = fragment.state || '';
                dataModel.setAccessToken(fragment.access_token);
            } else {
                // no token - so bounce to Authorize endpoint in AccountController to sign in or register
                window.location = "/Account/Authorize?client_id=web&response_type=token&state=" + encodeURIComponent(window.location.hash);
            }
        }

dataModel.get/setAccessToken сохраняет токен как переменную в LocalStorage. Я пытался вставить этот кусок кода в контроллер AngularJS, перенаправить пользователя, если в localstorage нет токена доступа. Но если я использую ngRoute, это портит ответ. Он меняет URL на маршрут по умолчанию, установленный в app.Config, и очищает возвращенный токен от URL, прежде чем я смог прочитать его.

Можете ли вы помочь мне понять, как и где я должен это использовать?

1 ответ

Это своего рода общее решение, я бы вырвал материал ASP.NET SPA. Возможно, с Knockout шаблон ASP.NET SPA предоставил некоторую ценность, но Angular может делать все, что вы пытаетесь сделать, без необходимости бороться с шаблоном на стороне сервера.

В идеале ваше приложение Angular обрабатывается так же, как любой другой клиент (Android или iOS) для ваших внутренних сервисов. Ваш бэкэнд-API может предоставить всю необходимую вам функциональность, включая аутентификацию - нет никаких причин выводить вашего пользователя из приложения Angular только для аутентификации.

Если вы хотите загрузить свое приложение, альтернативой ASP.NET SPA будет использование генератора Yeoman. Попробуйте генератор Angular Fullstack, он довольно хорошо демонстрирует, как вы можете аутентифицировать пользователя в вашем приложении Angular.

Другие вопросы по тегам