Comment conserver token en local ou stockage de Session en Angular 2?

je veux utiliser le stockage Local ou de session pour enregistrer le token d'authentification dans angular 2.0.0. j'utilise angular2-localstorage mais il ne fonctionne que angulaire 2.0.0-rc.5 et quand je l'ai utilisé en 2.0.0 à travers moi Tapez erreur. Je veux utiliser le stockage local par défaut de L'angle 2.0.0.

43
demandé sur halfer 2016-10-04 00:09:26

9 réponses

Enregistrer le local de stockage

localStorage.setItem('currentUser', JSON.stringify({ token: token, name: name }));

Charger à partir d'un local de stockage

var currentUser = JSON.parse(localStorage.getItem('currentUser'));
var token = currentUser.token; // your token
Angulaire 2 JWT Exemple d'Authentification Et Tutoriel

80
répondu Bojan Kogoj 2016-10-03 21:18:04

Cela dépend totalement de ce dont vous avez besoin exactement. Si vous avez juste besoin de stocker et de récupérer un jeton afin de l'utiliser dans vos requêtes http, je vous suggère tout simplement de créer un service et de l'utiliser dans l'ensemble de votre projet.

exemple d'intégration de base:

import {Injectable} from 'angular@core'

@Injectable()
export class TokenManager {

    private tokenKey:string = 'app_token';

    private store(content:Object) {
        localStorage.setItem(this.tokenKey, JSON.stringify(content));
    }

    private retrieve() {
        let storedToken:string = localStorage.getItem(this.tokenKey);
        if(!storedToken) throw 'no token found';
        return storedToken;
    }

    public generateNewToken() {
        let token:string = '...';//custom token generation;
        let currentTime:number = (new Date()).getTime() + ttl;
        this.store({ttl: currentTime, token});
    }

    public retrieveToken() {

        let currentTime:number = (new Date()).getTime(), token = null;
        try {
            let storedToken = JSON.parse(this.retrieve());
            if(storedToken.ttl < currentTime) throw 'invalid token found';
            token = storedToken.token;
        }
        catch(err) {
            console.error(err);
        }
        return token;

    }

}

cependant si vous devez utiliser le stockage local plus souvent, en utilisant les valeurs stockées dans vos vues app par exemple. Vous pouvez utiliser une des bibliothèques qui fournit un wrapper des webstorages comme vous fait avec angular2-localstorage.

j'ai créé il y a quelques mois ng2-webstorage qui doit répondre à vos besoins. Il fournit deux services ng2 et deux décorateurs pour synchroniser les valeurs du webstorage et les attributs du service/composant.

import {Component} from '@angular/core';
import {LocalStorageService, LocalStorage} from 'ng2-webstorage';

@Component({
    selector: 'foo',
    template: `
        <section>{{boundValue}}</section>
        <section><input type="text" [(ngModel)]="attribute"/></section>
        <section><button (click)="saveValue()">Save</button></section>
    `,
})
export class FooComponent {

    @LocalStorage()
    boundValue; // attribute bound to the localStorage
    value;

    constructor(private storage:LocalStorageService) {
        this.localSt.observe('boundValue')// triggers the callback each time a new value is set
            .subscribe((newValue) => console.log('new value', newValue));
    }

    saveValue() {
      this.storage.store('boundValue', this.value); // store the given value
    }

}
32
répondu Polochon 2016-10-09 15:36:25

nous pouvons le magasin de stockage de session comme ça

enregistrer le jeton doit être de la forme

 localStorage.setItem('user', JSON.stringify({ token: token, username: username }));

Magasin de Session à sessionStorage

vous pouvez stocker la chaîne et le tableau dans le stockage de session

Chaîne De Ex.

    let key = 'title'; 
    let value = 'session';
    sessionStorage.setItem(key, value);

Array Ex.

    let key = 'user'; 
    let value = [{'name':'shail','email':'example@gmail.com'}];

    value = JSON.stringify(value);

    sessionStorage.setItem(key, value);

obtenir la session stockée de sessionStorage par clé

const session = sessionStorage.getItem('key');

Supprimer la session de sessionStorage par la touche

sessionStorage.removeItem('key');

Supprimer toutes les sessions enregistrées à partir de sessionStorage

sessionStorage.clear();
  1. stocker le stockage Local devrait être comme

stocker les articles dans un entrepôt local

vous pouvez stocker à la fois la chaîne et le tableau dans le stockage d'emplacement

Chaîne Ex.

 let key = 'title'; 
 let value = 'session';
 localStorage.setItem(key, value);

Array Ex.

let key = 'user'; 
let value = [{'name':'shail','email':'example@gmail.com'}];

value = JSON.stringify(value);

localStorage.setItem(key, value);

Obtenir les articles qui sont stockés à partir de localStorage par la touche

const item = localStorage.getItem('key');

Supprimer la session de localStorage par la touche

localStorage.removeItem('key');

Supprimer tous les éléments enregistrés de localStorage

localStorage.clear();
16
répondu Shailesh Ladumor 2018-06-27 14:42:11

c'est Ici la meilleure pratique: https://github.com/PillowPillow/ng2-webstorage

Je l'utilisais à AngularJs, maintenant avec Angular2. Tres utile.

0
répondu Anton Pegov 2017-09-28 10:24:14

Dans votre application.module.ts, ajouter un nouveau fournisseur pour le stockage.

@NgModule({
   providers: [
      { provide: Storage, useValue: localStorage }
   ],
   imports:[],
   declarations:[]
})

et ensuite vous pouvez utiliser DI pour l'obtenir où vous en avez besoin.

 @Injectable({
    providedIn:'root'
 })
 export class StateService {
    constructor(private storage: Storage) { }
 }
0
répondu dwbartz 2018-05-30 17:22:09

import { Injectable,OpaqueToken } from '@angular/core'; export const localStorage = new OpaqueToken('localStorage');

Placer ces lignes en haut du fichier, il devrait résoudre le problème.

0
répondu betechnical 2018-06-16 04:38:19
var arr=[{"username":"sai","email":"sai@example.com,"}]
localStorage.setItem('logInArr', JSON.stringfy(arr))
0
répondu swathi 2018-08-16 10:43:05

en règle générale, le jeton ne doivent pas être stockées sur le localStorage ni sessionStorage. Les deux endroits sont accessibles depuis JS et JS ne devrait pas se soucier du token d'authentification.

IMHO le token doit être stocké sur un cookie avec le HttpOnly et Secure drapeau tel que suggéré ici: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

0
répondu ilopezluna 2018-08-16 10:52:08

exemple Simple:

var userID = data.id;

localStorage.setItem('userID',JSON.stringify(userID));
0
répondu Navin Kumar 2018-09-05 20:09:05