authentication - 如何在 flutter 应用程序的入口点检查身份验证 token

标签 authentication flutter dart jwt

我需要知道如何在应用的入口点检查 token 。我已经通过 `

将其保存在共享偏好中
_saveToken() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = await response.data['token'];
    await prefs.setString('jwt', token);
  }

` 如果这个 jwt 不为空,我需要绕过我的登录屏幕。我该怎么做?

最佳答案

您可以在下面复制粘贴运行完整代码
您可以在main()中获取jwt token,并在initialRoute中检查jwt内容是否为null

代码片段

String jwt;

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  SharedPreferences prefs = await SharedPreferences.getInstance();
  jwt = await prefs.getString("jwt");
  print('jwt ${jwt}');
  runApp(MyApp());
}
...
return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: jwt == null ? "login" : "/",
      routes: {
        '/': (context) => MyHomePage(
              title: "demo",
            ),
        "login": (context) => LoginScreen(),
      },

工作演示

enter image description here

完整代码

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/services.dart';

String jwt;

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  SharedPreferences prefs = await SharedPreferences.getInstance();
  jwt = await prefs.getString("jwt");  
  print('jwt ${jwt}');
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: jwt == null ? "login" : "/",
      routes: {
        '/': (context) => MyHomePage(
              title: "demo",
            ),
        "login": (context) => LoginScreen(),
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

class LoginScreen extends StatefulWidget {
  @override
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Login"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'This is Login screen',
            ),
          ],
        ),
      ),
    );
  }
}

关于authentication - 如何在 flutter 应用程序的入口点检查身份验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61580019/

相关文章:

authentication - 在 .NET Core API 上使用 OpenID access_token

flutter - 如何防止整数值变为负数

Flutter:我可以在 BLoC 架构中使用 setState() 吗?

flutter - 当 flutter 应用程序处于后台时,通知不会进入 Release模式

flutter - 我怎样才能避免 Dart 中这种不必要的转换?

android - 我该如何将Future的return语句放入小部件中?

flutter - Flutter:处理语音.OnError抖动语音

php - 如何以编程方式登录然后使用 Laravel 5.5 重定向?

php - 如何记住用户注册前访问的 URL

android - 如何访问使用 MIFARE 应用程序目录结构的 MIFARE Classic 卡?