कोणीय 8 में यह जांचने के विभिन्न तरीके क्या हैं कि JWT टोकन समाप्त हो गया है या नहीं। समाप्ति समय 1 घंटा है। कामकाजी कोड/नमूनों की अत्यधिक सराहना की जाएगी।

6
Pinnu 19 मार्च 2020, 16:24
मैं इसका उपयोग करता हूं, यह वास्तव में आसान है: github.com/auth0/angular-jwt
 – 
Tim
19 मार्च 2020, 16:27
आप इस पैकेज का उपयोग कर सकते हैं "npmjs.com/package/jwt-decode" और जांचें समाप्ति समय canActivate को
 – 
Yash Rami
19 मार्च 2020, 16:27

3 जवाब

आप एंगुलर-जेडब्ल्यूटी पैकेज के साथ टोकन समाप्ति तिथि प्राप्त कर सकते हैं

 getTokenExpirationDate(token: string): Date {
    const decodedToken = helper.decodeToken(token);

    if (decodedToken.exp === undefined) { return null; }

    const date = new Date(0);
    date.setUTCSeconds(decodedToken.exp);
    return date;
  }
3
parrycima 19 मार्च 2020, 16:35
1
यह अब कोणीय 12 के लिए एक त्रुटि फेंकता है, नल दिनांक टाइप करने के लिए असाइन करने योग्य नहीं है
 – 
Moe
18 मई 2021, 03:54

मैंने अपने ऐप में ऐसा कुछ लागू किया और यह ठीक काम करता है:

this.userToken$.pipe(
            filter((token: AuthToken) => !!token),
            map((token: AuthToken) => token.expiresIn()),
            tap((expiresIn: number) => console.log('token expires in', expiresIn / 1000 / 60, 'minutes')),
            switchMap((expiresIn: number) => timer(expiresIn)),
        ).subscribe(() => {
            console.warn('token expires');
            this.logout();
        });

इस तरह, एक बार जब वह एक नया अनुरोध निष्पादित करने का प्रयास करता है तो उपयोगकर्ता लॉग आउट नहीं होता है, लेकिन जैसे ही टोकन समाप्त हो जाता है।

0
Oscar Guérin 19 मार्च 2020, 16:36
वहां यूजरटोकन$ क्या है?
 – 
Harry
14 जुलाई 2020, 15:34
एक जेडब्ल्यूटी (समाप्ति तिथि, उपयोगकर्ता आईडी ...) के बारे में कुछ जानकारी रखने वाली एक कस्टम ऑब्जेक्ट का अवलोकन। मेरे मामले में, इसे स्थानीय भंडारण से पुनर्प्राप्त किया जाता है।
 – 
Oscar Guérin
15 जुलाई 2020, 16:51

विकल्प 1 - मैनुअल

टोकन समाप्ति समय UTC समय प्रारूप में टोकन में एन्कोड किया गया है। तो इसे यूटीसी में वर्तमान समय के खिलाफ मैन्युअल रूप से लाया और चेक किया जा सकता है। निम्नलिखित का प्रयास करें

private tokenExpired(token: string) {
  const expiry = (JSON.parse(atob(token.split('.')[1]))).exp;
  return (Math.floor((new Date).getTime() / 1000)) >= expiry;
}

ngOnInit() {
  if (this.tokenExpired(token)) {
    // token expired
  } else {
    // token valid
  }
}

विकल्प 2 - JwtHelperService का उपयोग करना

आप JwtHelperService के isTokenExpired() यह जांचने की विधि कि क्या टोकन पहले ही समाप्त हो चुका है।

import {JwtHelperService} from '@auth0/angular-jwt';
.
.
constructor(private jwtHelper: JwtHelperService) { }

ngOnInit() {
  if (this.jwtHelper.isTokenExpired(token)) {
    // token expired 
  } else {
    // token valid
  }
}
18
Michael D 19 मार्च 2020, 19:14
नमस्ते, क्या विकल्प 2 यानी थर्ड पार्टी ऑथ0 लाइब्रेरी का उपयोग करना एक अच्छा समाधान है?
 – 
user14734781
14 सितंबर 2021, 23:42
1
@ साउथस्टार: isTokenExpired() के स्रोत पर एक त्वरित नज़र से पता चलता है कि यह कमोबेश मैनुअल के समान ही कार्यान्वयन है। मैं इसका उपयोग करना चाहता हूं यह अपनी राय और सुविधा का मामला है।
 – 
Michael D
15 सितंबर 2021, 15:38