我有一個使用 flutter_web_auth 0.4.1 包實作 Web 身份驗證的應用程式。
當我在三星智能手機上測驗我的實作時,一切都像魅力一樣作業。Chrome 瀏覽器在身份驗證網站上啟動,身份驗證后我回到我的應用程式并按照我的需要重繪 視圖。
但是當我在華為平板電腦上測驗我的實作時,就在 Chrome 發布后,我失去了連接。驗證后我回到了我的應用程式,但我可以看到應用程式正在重新加載(我可以看到啟動螢屏)而沒有保存令牌,因為我總是回到登錄螢屏。
這是我的實作:
驗證功能(由 ElevatedButton onPressed 事件呼叫):
authenticate() async {
final result = await FlutterWebAuth.authenticate(
url: "https://xxxx.yyyy.eu/auth/login?authorize=yes",
callbackUrlScheme: "com.example.zzzzzzzz");
final token = Uri.parse(result).queryParameters['token'] ?? '';
// Save token
var prefs = await SharedPreferences.getInstance();
prefs.setString("token", token);
refreshAfterAuthentication();
}
AndroidManifest.xml:
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.example.zzzzzzzz" />
</intent-filter>
</activity>
身份驗證后的 Web 重定向(Angular 應用程式):
window.location.href = 'com.example.zzzzzzzz://success?token=' data.token;
由于我失去了連接,就在 chrome 啟動后,我在控制臺中看不到重定向到它后導致應用程式重新加載的原因。
還有其他方法可以除錯這種情況嗎?
編輯:
智能手機在Android 9下運行,平板在Android 8下運行。是否有可能無法在Android 8上實作web auth?
uj5u.com熱心網友回復:
你在 android manifist.xml 中有互聯網權限嗎?
<uses-permission android:name="android.permission.INTERNET"/>
如果答案是肯定的,我認為您必須將 timeOut 添加到您的請求中:
final result = await FlutterWebAuth.authenticate(
url: "https://xxxx.yyyy.eu/auth/login?authorize=yes",
callbackUrlScheme: "com.example.zzzzzzzz").timeout(
Duration(seconds: 5000),
);
uj5u.com熱心網友回復:
我通過將匯出的屬性添加到活動中解決了這個問題AndroidManifest.xml,如下所示:
AndroidManifest.xml:
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" android:exported="true">
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.example.andidoor" />
</intent-filter>
</activity>
安卓參考:https ://developer.android.com/guide/topics/manifest/activity-element#exported
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/497443.html
