Как исправить {detail: Учетные данные для аутентификации не были предоставлены.} в Django Rest Framework

Я пытаюсь получить информацию из Django rest framework в качестве бэкенда и из фронтенда с помощью flutter.

Последовательность проекта такова, что я вхожу в систему и получаю {"key":"XXXXXXXXXXXXX"}

Просто в целях тестирования я пытаюсь вручную добавить ключ, чтобы получить доступ. Я продолжаю получать {detail: Authentication credentials were not provided.} Я не уверен, является ли ошибка следствием настроек Django Rest Framework или фронт-энда Flutter

Вот Fetch user() на домашнем экране:

Future<User> fetchUser() async {
  var url = Uri.parse(Config.apiURL + Config.userProfileAPI);
  print(url);
  final response = await http.post(
    url,
    // headers: {
    //   HttpHeaders.authorizationHeader:
    //       'Bearer XXXXXXXXXXXXX',
    headers: {
      "Authorization": 'JWT XXXXXXXXXXXXX'
      // 'Authorization:  ',
    },);

  final responseJson = jsonDecode(response.body);
  print(responseJson);

  if (response.statusCode == 200) {
    return User.fromJson(jsonDecode(response.body));
  } else {
    throw Exception('Failed to load User');
  }}

class User {
  int? pk;
  String? username;

  User({this.pk, this.username});

  User.fromJson(Map<String, dynamic> json) {
    pk = json['pk'];
    username = json['username'];}

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['pk'] = this.pk;
    data['username'] = this.username;
    return data;}}

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();}

class _HomeScreenState extends State<HomeScreen> {
  late Future<User> futureUser;

  @override
  void initState() {
    super.initState();
    futureUser = fetchUser();}

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      .........................
            FutureBuilder<User>(
              future: futureUser,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return Text(snapshot.data!.username ?? 'noname');
                } else if (snapshot.hasError) ;
                print(snapshot.error);
                {return Text('${snapshot.error}');}
                return const CircularProgressIndicator();
              },),),],)),),);}}

Вот настройки фреймворка Django Rest:

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.BasicAuthentication', ),
#     'DEFAULT_AUTHENTICATION_CLASSES': (
#         'rest_framework.authentication.TokenAuthentication',
#     ),
#     # 'DEFAULT_PERMISSION_CLASSES': (
#     #     'rest_framework.permissions.IsAuthenticated',
#     # ),
#     'DEFAULT_PERMISSION_CLASSES': (
#         'rest_framework.permissions.AllowAny',
#     ),
}

AUTHENTICATION_BACKENDS=['users.models.EmailBackend']

CORS_ALLOW_ALL_ORIGINS=True
AllowAny =True

Мой вопрос:

После входа в систему почему мой HttpHeaders.authorizationHeader не работает, если пользователь уже вошел в систему, должен ли я иметь возможность напрямую получить данные пользователя, используя Token Key?

В моем Django я получаю Unauthorized: /api/dj-rest-auth/user/

Вам нужно добавить TokenAuthentication к вашим DEFAULT_AUTHENTICATION_CLASSES

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ]
}

добавить rest_framework.authtoken к INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'rest_framework.authtoken',
]

In Flutter:

    headers: {
      "Authorization": 'Token XXXXXXXXXXXXX'
    },);

Вернуться на верх