如何让用户登录? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

这是我的情景:

用户通过简单地选择未使用的用户名并发出通行证来注册应用程序当用户登录应用程序时,他的userID(我的数据库中用户的主键)存储在本地并用于我的所有服务。

我正在使用SQL Server作为数据库。

我想要完成的是,一旦用户登录。我想让他登录,但我不知道如果应用程序在关闭后再次启动,用户ID甚至不会被初始化(直到用户登录)所以我不知道应该在应用程序中自动登录哪个用户。我怎样才能解决这个问题(如果可能的话,我更喜欢从前端进行此操作,如果没有,那么我怎么能在后端明智地做到这一点?)

flutter
1个回答
0
投票

您可以使用共享首选项来保存用户ID,因为您使用的是SQL Server DB,也许您还会提供令牌并且还需要存储令牌。

在用户首次登录后,在登录成功后保存数据。

import 'package:shared_preferences/shared_preferences.dart';

 var _prefs = SharedPreferences.getInstance();

  /// ----------------------------------------------------------
  /// Method that saves the token (if you need the token) and userID in Shared Preferences
  /// ----------------------------------------------------------
  Future<bool> _setMobileToken(String token , String username, String userID) async {
    final SharedPreferences prefs = await _prefs;
    prefs.setString("username", username);
    prefs.setString("userID", userID);
    return prefs.setString(_storageKeyMobileToken, token);
  }

之后,当您关闭应用程序并再次打开时,您只需要从共享首选项中读取数据。

    // Async function that calls getSharedPreferences
  awaitSharedPref() async {
    await getSharedPreferences();
  }


  // Get the username and token from SharedPreferences and check if the token is valid
  awaitToken() async {
    await functions.getMobileToken();

    if (token != "" && token != null && username!= "" && username!= null ) {

        // If you use any token try to make a validation if was expired or not 
        //_presenter.validateToken(token, username.toString());

        // If not redirect the user directly on the home page 
        Navigator.of(_ctx).pushReplacementNamed("/home");

    } else {
      Navigator.of(context).pushNamed("/login");
    }

  }

如果你想要你也可以添加一个“记住我”复选框,所以即使他下次打开它时从应用程序注销,也可以直接点击带有用户名的“登录”按钮并传递自动完成功能。

    final rememberMe = CheckboxListTile(
  value: checkValue,
  onChanged: _onChanged,
  title: new Text("Remember me", style: new TextStyle(
      color: Colors.blueGrey[600], fontStyle: FontStyle.italic),),
  controlAffinity: ListTileControlAffinity.leading,
);


_onChanged(bool value) async {
    sharedPreferences = await SharedPreferences.getInstance();
    setState(() {
      checkValue = value;
      sharedPreferences.setBool("check", checkValue);
      sharedPreferences.setString("username", username.text);
      sharedPreferences.setString("password", password.text);
      getCredential();
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.