oauth_dio
एक कस्टमाइज़ेबल oauth क्लाइंट जिसमें टोकन स्टोरेज और डिओ के इंटरसेप्टर हैं
एक OAuth क्लाइंट जो Dio के साथ काम करता है।
यह अंग्रेज़ी मूल स्नैपशॉट है। नवीनतम सामग्री GitHub पर देखें।
A customizable oauth client with token storage and interceptors for dio.
Instantiate a new OAuth Client:
// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';
final oauth = OAuth(
tokenUrl: '<YOUR TOKEN URL>',
clientId: '<YOUR CLIENT ID>',
clientSecret: '<YOUR SECRET>');
Obtaining an access token using username and password:
OAuthToken token = oauth.requestTokenAndSave(
PasswordGrant(
username: '<YOUR USERNAME>',
password: '<YOUR PASSWORD>'
)
).then((token) {
print(token.accessToken);
});
Updating access token using a refresh token:
OAuthToken token = oauth.requestTokenAndSave(
RefreshTokenGrant(
refreshToken: '<YOUR REFRESH TOKEN>'
)
).then((token) {
print(token.accessToken);
});
Instantiate a new OAuth Client with a permanent storage, by default oauth is configured with memory storage.
In this example we will use the flutter_secure_storage plugin to store the token on the device's keychain.
// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class OAuthSecureStorage extends OAuthStorage {
final FlutterSecureStorage storage = const FlutterSecureStorage();
final accessTokenKey = 'accessToken';
final refreshTokenKey = 'refreshToken';
final tokenExpirationKey = 'tokenExpiration';
@override
Future<OAuthToken> fetch() async {
final expiration = await storage.read(key: tokenExpirationKey);
return OAuthToken(
accessToken: await storage.read(key: accessTokenKey),
refreshToken: await storage.read(key: refreshTokenKey),
expiration: DateTime.tryParse(expiration.toString()));
}
@override
Future<OAuthToken> save(OAuthToken token) async {
await storage.write(key: accessTokenKey, value: token.accessToken);
await storage.write(key: refreshTokenKey, value: token.refreshToken);
await storage.write(key: tokenExpirationKey, value: token.expiration.toString());
return token;
}
@override
Future<void> clear() async {
await storage.delete(key: accessTokenKey);
await storage.delete(key: refreshTokenKey);
await storage.delete(key: tokenExpirationKey);
}
}
final oauth = OAuth(
tokenUrl: '<YOUR TOKEN URL>',
clientId: '<YOUR CLIENT ID>',
clientSecret: '<YOUR SECRET>',
storage: OAuthSecureStorage()
);
final authenticatedDio = Dio();
authenticatedDio.interceptors.add(BearerInterceptor(oauth));
authenticatedDio.get('/my/protected/resource').then((response) {
print(response.data);
})
Use the abstract class OAuthGrantType to implement a custom grant type.
import 'package:oauth_dio/oauth_dio.dart';
class TicketGrant extends OAuthGrantType {
String accessToken;
TicketGrant({
this.accessToken
})
@override
RequestOptions handle (RequestOptions request) {
request.data = "grant_type=ticket&access_token=$accessToken";
return request;
}
}
// Request token using ticket grant
oauth.requestTokenAndSave(
TicketGrant(
accessToken: 'foobar'
)
)
Please feel free to give me any feedback helping support this package!