Flutter:如何保持用户登录和注销

时间:2019-08-08 04:58:28

标签: authentication flutter

我正在获取csrf令牌并在控制台中打印响应数据,但是如何使用响应数据保持用户登录。我正在使用状态码进行登录,即,如果状态码为200,则此后移至登录状态。希望让用户保持登录状态,仅在用户要注销时才注销

我看到了很多例子,但对我来说都没有帮助。

在我的情况下,我正在使用csrf令牌,但无法使其保持登录状态,并且我也使用了登录表单。

LoginPage.dart

1[2-90]*

2 个答案:

答案 0 :(得分:2)

从api获取响应代码200后,您可以在“共享的偏好设置”中输入一个条目。

 SharedPreferences prefs = await SharedPreferences.getInstance();
 prefs?.setBool("isLoggedIn", true);

然后您可以从共享首选项检查状态后导航用户

Future<void> main() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var status = prefs.getBool('isLoggedIn') ?? false;
  print(status);
  runApp(MaterialApp(home: status == true ? Login() : Home()));
}

更新:-

另一种实现方法是,您也可以将逻辑添加到启动屏幕中,并且启动屏幕应该是应用程序中的入口点

class SplashScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _SplashScreenState();
  }
}

class _SplashScreenState extends State<SplashScreen> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    startTimer();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
              image: AssetImage("assets/images/clinician_splash.png"),
              fit: BoxFit.cover),
        ),
      ),
    );
  }

  void startTimer() {
    Timer(Duration(seconds: 3), () {
      navigateUser(); //It will redirect  after 3 seconds
    });
  }

  void navigateUser() async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var status = prefs.getBool('isLoggedIn') ?? false;
    print(status);
    if (status) {
      Navigation.pushReplacement(context, "/Home");
    } else {
      Navigation.pushReplacement(context, "/Login");
    }
  }
}

要注销,请在注销按钮的onPress事件中添加以下功能:

void logoutUser(){
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs?.clear() 
 Navigator.pushAndRemoveUntil(
      context, 
      ModalRoute.withName("/SplashScreen"), 
     ModalRoute.withName("/Home")
    );
}

答案 1 :(得分:0)

对于登录凭据,我相信您应该使用Flutter Secure Storage,它是ios密钥链和android的AES加密的包装。

https://pub.dev/packages/flutter_secure_storage#-readme-tab-