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.