fresh
一個適用於 Dart 的權杖重新整理程式庫。本套件公開了各種重新整理權杖實作(REST、GraphQL 等)共用的核心元件。
🍋 一個用於 Dart 的權杖刷新程式庫。
一個適用於 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.