2015-09-09 4 views
0

Я работаю над своим первым угловым приложением и с помощью JWT для аутентификации пользователей. После того, как пользователь вошел в систему успешно, я храню маркер в объекте $ rootScope, т.е.

$rootScope.sessionStorage = { 
    "token" : null, 
    "loggedIn" : false, 
    "userId" : null 
}; 

Затем я использую это при выполнении вызовов API.

Это плохое место для хранения переменных, которые будут использоваться во всем приложении? Я понимаю, что значение будет потеряно, если пользователь обновит или закрывает окно, но это не проблема.

ответ

2

Если вы не беспокоитесь о том, чтобы избавиться от токена, то его хранение в памяти прекрасное.

Однако, если вы собираетесь хранить его в памяти, я думаю, что более семантическое и масштабируемое место для хранения маркера будет как константа:

app.constant('TOKEN', token); 

$rootScope неявно делает вещи автоматически доступны для всех контроллеров без инъекции, которые, как я думаю, вам не обязательно нужно в этом случае.

Вы можете просто вводить константу где это необходимо (что, вероятно, будет в перехватчик):

$httpProvider.interceptors.push('myRequestInterceptor'); 

Ваша реализация перехватчика до вас, но обычно это будет просто включать заплат Authorization заголовок с полем Bearer <token>.

Использование локального хранилища довольно просто. angular-storage делает это довольно легко (это инъекционная услуга). Инвестиции для хранения в локальном хранилище будут минимальными по сравнению с тем, что они хранят его в памяти как постоянную.

+0

благодарит за информацию, что это действительно полезно. –

+0

@JonHunter, без проблем, рад, что это полезно. –

Смежные вопросы