【问题标题】:How can I get token response with username and password textfields? dart/flutter如何使用用户名和密码文本字段获取令牌响应?飞镖/颤振
【发布时间】:2021-03-31 14:15:45
【问题描述】:

我对@9​​87654321@ 和flutter 有点陌生。 我想使用用户名和密码登录并获取令牌响应。 如何从authorization 的文本字段中获取用户名和密码? 我也不确定验证码是否正确?

imports

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomePageState();
  }
}

class _HomePageState extends State<HomePage> {

  final  usernameController = TextEditingController();
  final  passwordController = TextEditingController();

Future<String> authorization() async {
    var request = http.MultipartRequest(
        'POST', Uri.parse('url'));
    request.fields.addAll({
      'grant_type': 'info',
      'client_id': 'info',
      'username': username,
      'password': password,
    });

    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) {
      Map<String, dynamic> auth =
          jsonDecode(await response.stream.bytesToString());

      return auth['access_token'];
    } else {
      return "";
    }
  }

  void _setText() {
    setState(() {
      username = usernameController.text;
      password = passwordController.text;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Login'),
        backgroundColor: Colors.green,
      ),
      body: Column(
        children: [
          Padding(
            child: TextField(
              decoration: InputDecoration(labelText: 'username'),
              controller: usernameController,
            ),
          ),
          Padding(
            child: TextField(
              decoration: InputDecoration(labelText: 'password'),
              controller: passwordController,
            ),
          ),          
          RaisedButton(
            onPressed: _setText,
            child: Text('Login'),
          ),
        ],
      ),
    );
  }
}

【问题讨论】:

  • 先用usernameController.text.trim()也为passwordController,然后用http包发送请求。

标签: flutter dart authorization token rest


【解决方案1】:
  • 由于您使用的是 TextEditingControllers,因此您不必使用字符串来保存用户名和密码的值。

像这样改变它们:

  TextEditingController usernameController = TextEditingController();
  TextEditingController  passwordController = TextEditingController();

然后,将您的 API 帖子更改为:

Future<String> authorization() async {
    var request = http.MultipartRequest(
        'POST', Uri.parse('url'));
    request.fields.addAll({
      'grant_type': 'info',
      'client_id': 'info',
      'username': usernameController.text, //notice you have to use .text
      'password': passwordController.text, //notice you have to use .text
    });
  • 你的onPressed 是这样的:

    RaisedButton(
    onPressed: () async {
    String token = await authorization();
    print(token); //This will be your token.
    },
    child: Text('Login'),),
    
  • 你不再需要这个了:

    //void _setText() {
    //setState(() {
    //username = usernameController.text;
    // password = passwordController.text;
    //});
    //}
    

【讨论】:

  • 您好,谢谢您的回答。当我实施您的报价时,它只会在终端上提供flutter: 。无法授权,怎么办?
  • 您是否在 Firebase 控制台中启用了电子邮件注册登录方法?请仔细检查。这很可能是原因。发布您得到的确切错误。
  • 嗨。我不使用火力基地。在另一个测试服务器上创建了一个端点,我正在尝试与它进行交易。我必须连接并列出和编辑数据。
  • 好的,非常感谢。我会向那些准备的人询问这些信息的准确性。
  • 嗨。问题已经解决了。我可以问你关于这个主题的其他问题还是我应该打开另一个标题?
【解决方案2】:

你应该稍微改变你的方法,为你的函数authorization提供参数,这将调用你的API:

  // Add parameters
  Future<String> authorization(username,password) async {
      ...
  }

  void _setText() {
    // This will call your API with the form parameters
    result = await authorization(usernameController.text, passwordController.text);
    // result should have your token (= the response from the API)
  }

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2019-05-30
    • 2019-05-24
    • 2022-07-27
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多