搜尋套件、儲存庫與 APP 分類

套件詳情v0.2.9

oauth_dio

一個可自訂的 OAuth 客戶端,支援權杖儲存和 dio 的攔截器

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
537
喜歡數
58
Pub 分數
150

安裝套件

flutter pub add oauth_dio

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

oauth_dio 是一個可自訂的 OAuth 客戶端,適用於 Dart 和 Flutter 應用程式,建構於 Dio HTTP 客戶端之上。它提供無縫的權杖管理、自動權杖更新,以及攔截器來處理驗證流程。該套件支援安全的權杖儲存,並能與現有的 Dio 設定順暢整合。非常適合需要在多個平台使用 OAuth2 或類似驗證協定的應用程式。

適用情境

  • 整合 OAuth2 登錄流程
  • 自動刷新過期令牌
  • 使用承載令牌保護 API 請求
  • 處理 HTTP 呼叫中的驗證標頭
  • 使用認證建構安全的 REST 客戶端

主要特色

  • 令牌儲存和檢索
  • 自動令牌刷新
  • 基於 Dio 的攔截器
  • 可自定義的 OAuth 配置
  • 跨平台支援

適合對象

  • 使用 Dio 的 Flutter 應用
  • 使用 OAuth2 認證的應用程式
  • 需要安全令牌處理的開發者
  • 需要一致身分驗證的多平台應用
  • 希望最小化樣板代碼的項目用於身分驗證

使用建議

  • 需要設置 Dio
  • 需要正確的令牌存儲設置
  • 可能需要自定義邏輯來處理複雜流程
  • 依賴外部OAuth提供者
  • 限制為 OAuth2 風格的流程

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

oauth_dio

A customizable oauth client with token storage and interceptors for dio.

Getting Started

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);
});

Configuring Dio to send access tokens:

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);
})

Custom grant types

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'
  )
)

Feedback

Please feel free to give me any feedback helping support this package!

所屬分類

依賴

依賴清單 1 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。