58

I'm working on a simple Flutter mobile app that needs to call out to an API that uses Basic Auth.

I can hit the API in Postman using email & password credentials and it encodes the email & password in Base64 (I assume with a ":" separating) before performing the request.

I'm not sure how to do this in Flutter / Dart...

I've tinkered with the http package and tried to do the Base64 encoding... but I just get back errors from the server.

Can anyone provide some guidance or an example for a basic auth request?

2 Answers 2

149

Assuming that your server expects that the username:password combo will be encode it UTF-8 (see RFC 7617 for more details) then use this:

import 'dart:convert';
    
import 'package:http/http.dart';
    
main() async {
  String username = 'test';
  String password = '123£';
  String basicAuth =
      'Basic ' + base64.encode(utf8.encode('$username:$password'));
  print(basicAuth);
    
  Response r = await get(Uri.parse('https://api.somewhere.io'),
      headers: <String, String>{'authorization': basicAuth});
  print(r.statusCode);
  print(r.body);
}
Sign up to request clarification or add additional context in comments.

6 Comments

Perfect! I could piece together the http bits, but couldn't figure out how to actually build the header. Just tested this out and it works perfectly
you can use http post if header is required, eg : final loginResponse = await client.post(loginUrl, body: json.encode(user), headers: header);
Hi, I want to use oAuth1 instead of basic as I am not on HTTPS, I am on HTTP, any recommendation for that?
Prebuilding the Header-map requires strong types in the Map: medium.com/@hagenverfolgt/…
In my case, this causes an forever pending request. Any idear why?
|
23

I know it's late but I am posting this if it can help others.

import 'dart:convert';

var auth = 'Basic '+base64Encode(utf8.encode('$username:$password'));

Future<Response> callAPI(param) async {
    await dio.post('/api/test',
        data: {'param': param},
        options: Options(headers: <String, String>{'authorization': auth})); 
  }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.