fresh
다트용 토큰 갱신 라이브러리입니다. 이 패키지는 REST, GraphQL 등 다양한 리프레시 토큰 구현에 공통되는 핵심 구성 요소를 노출합니다.
🍋 Dart용 토큰 갱신 라이브러리.
다트용 토큰 갱신 라이브러리입니다. 이 패키지는 REST, GraphQL 등 다양한 리프레시 토큰 구현에 공통되는 핵심 구성 요소를 노출합니다.
토큰 갱신을 위한 HTTP 인터셉터입니다. Fresh는 package:dio 위에 구축되어 인증 토큰을 자동으로 관리합니다.
토큰 갱신을 위한 GraphQL 링크입니다. package:graphql 위에 구축되어 있으며 인증 토큰을 투명하게 관리합니다.
자동으로 새로 고치는 HTTP 클라이언트입니다. package:http 위에 구축되어 있으며, 인증 토큰을 자동으로 관리합니다.
아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
build License: MIT GitHub stars
A collection of packages for automatic token refresh in Dart and Flutter. Fresh handles refreshing, caching, and attaching authentication tokens transparently so your API calls just work.
Token-based authentication seems simple until you handle the edge cases: tokens expire mid-session, multiple requests fail at the same time triggering duplicate refreshes, refresh tokens get revoked, and you need to route users to login when auth is lost. Fresh handles all of this so you don't have to.
| Package | Pub |
|---|---|
| fresh | pub package |
| fresh_dio | pub package |
| fresh_graphql | pub package |
| fresh_http | pub package |
authenticationStatus stream for reacting to login/logout eventsTokenStorage - bring your own persistence layerOAuth2Token with expiresAt supportfinal dio = Dio();
dio.interceptors.add(
Fresh.oAuth2(
tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
refreshToken: (token, client) async {
final response = await client.post(
'https://api.example.com/auth/refresh',
data: {'refresh_token': token?.refreshToken},
);
return OAuth2Token(
accessToken: response.data['access_token'],
refreshToken: response.data['refresh_token'],
);
},
),
);
See the fresh_dio README for full documentation.
import 'dart:convert';
final freshLink = FreshLink.oAuth2(
tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
refreshToken: (token, client) async {
final response = await client.post(
Uri.parse('https://api.example.com/auth/refresh'),
body: jsonEncode({'refresh_token': token?.refreshToken}),
);
final body = jsonDecode(response.body) as Map<String, dynamic>;
return OAuth2Token(
accessToken: body['access_token'],
refreshToken: body['refresh_token'],
);
},
shouldRefresh: (response) =>
response.errors?.any((e) => e.message.contains('UNAUTHENTICATED')) ?? false,
);
// HttpLink comes from package:gql_http_link
final link = Link.from([freshLink, HttpLink('https://api.example.com/graphql')]);
See the fresh_graphql README for full documentation.
import 'dart:convert';
final client = Fresh.oAuth2(
tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
refreshToken: (token, client) async {
final response = await client.post(
Uri.parse('https://api.example.com/auth/refresh'),
body: jsonEncode({'refresh_token': token?.refreshToken}),
);
final body = jsonDecode(response.body) as Map<String, dynamic>;
return OAuth2Token(
accessToken: body['access_token'],
refreshToken: body['refresh_token'],
);
},
);
See the fresh_http README for full documentation.