如何在Flutter应用的入口点检查身份验证令牌 [英] How to check auth token at entry point of flutter app

查看:208
本文介绍了如何在Flutter应用的入口点检查身份验证令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要知道如何在应用程序的入口点检查令牌.我已经通过`

I need to know how to check the token at entry point of app. I have already saved that in shared preference by `

_saveToken() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = await response.data['token'];
    await prefs.setString('jwt', token);
  }

`,并且如果此jwt不为null,则需要绕过我的登录屏幕.我该怎么办?

` and I need to bypass my login screen if this jwt is not null. How can I do this?

推荐答案

您可以在
下复制粘贴运行完整代码 您可以在main()中获取jwt token并检查initialRoute

You can copy paste run full code below
You can get jwt token in main() and check jwt content is null or not in initialRoute

代码段

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(),
      },

工作演示

完整代码

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',
            ),
          ],
        ),
      ),
    );
  }
}

这篇关于如何在Flutter应用的入口点检查身份验证令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆